WACC使用的技术
WACC使用的是LALR(1)文法,先行符号集的计算采用的反向传播算法,而不是LR(1)合并同心集的算法。反向传播算法的好处是计算同心集节省空间,而且可以直接通过LR(0)文法DFA(确定性有限自动机)直接生成。
本人认为,在编译原理中较难的部分在自底向上的分析,而目前的书籍均在此处退避三舍。即使有,也是手工构造SLR(1)或LR(0)的分析表。作者在在这里给读者揭示编译原理中最神秘的部分,就是自动编译工具YACC的设计与实现。但是本书并不包括编译原理所有内容,仅涉及与YACC相关的知识。
后面的章节可能会涉及到first集、LR(0)文法、LALR(1)文法。还会涉及到自顶向下的分析方法。WACC识别语法文件的程序使用的就是递归下降分析方法。
研习YACC,自己动手做。其目的不在做出一个程序,而在于如何在实践中掌握理论,掌握抽象问题、分析问题、解决问题的能力。仅阅读一本教材,会做后面的习题,学到的东西是浮在表面的。作为一个计算机系的学生,不应该只会在原理上做”思想实验” (有人称意淫)。还需要能实际上解决问题。王阳明格竹的故事告诉我们,”思想实验”不但解决不了问题,还有害健康。呵呵。