这个版本的语法分析器是由工具 yacc 生成的,其相应的源文件为 lua.stx。这个不是我关注的重点,略过。
这一节这样结束有点儿寒酸,闲话几句。
yacc 的历史就不说了,yacc 类工具出现,使得程序语言分析相关的工作复杂度降低了很多。这也是之前面曾经提到过的,当时 UNIX 世界里出现了不少小语言的原因。
在语法没有最终确定下来之前,用 yacc 这类工具可以快速的验证自己的想法,作出一个程序原型出来。等语法稳定了,可以手写语法分析部分,这是为了提高程序的定制性和程序运行的效率,比如 Lua 就是这么做的。这也不排除 Lua 的语法比较精练,由于其语法设计的小巧而正交,在一定程序上降低了手写分析器的难度。手写分析器的主要原因还是为了效率,否则,对于接受过编译原理训练的人来说写个分析器是没有多大难度的。在不是特别要求效率和健壮性的情况下,这基本相当于编译原理课的一个大作业。
再说点题外话,语法只是为了给人看的,脚本出现的原因就是为了降低编程的门槛。如果一个语言的语法做得像是 Lisp 那样,直接就是抽象语法树的样式,根本就省了解析这一步了,上来就可以执行则省了很多事儿了。不过,显然,像这种抽象语法树样式的程序并不是人人都喜欢和能轻易接受的。
闲话不再多说,翻篇儿了。
----------------------------------------
到目前为止的问题:
> do_dump 方法里调的那几个方法又分别是干什么的?
----------------------------------------
原文地址:http://my.oschina.net/xhan/blog/325670