yacc如何从语法规则生成语法分析器?

时间:2011-01-21 06:36:13

标签: yacc

我已经理解了词法分析是如何运作的,

但不知道语法分析是如何完成的,

虽然原则上他们两个应该相似(唯一的区别在于 输入符号,字符或标记的类型。),

但生成的解析器代码差异很大。

特别是yy_action,yy_lookahead,在词汇分析中没有这样的东西......

1 个答案:

答案 0 :(得分:1)

用于生成词法分析器的语法通常为regular grammars,而用于生成合成分析器的语法通常为context-free grammars。尽管它们在表面看起来可能相同,但它们具有非常不同的特征和能力。 deterministic finite automatons可以识别常规语法,这些语法构造起来相对简单并且速度很快。无上下文语法对于构建识别器更具挑战性,并且通常解析器生成器工具将仅为无上下文语法的子集构造解析器。例如,yacc使用push-down automata为无上下文语法构造解析器,这些语法也是LALR(1)语法。

有关解析的更多信息,我强烈推荐Parsing Techniques,它详细介绍了解析(但描述得很好!)细节的所有细微差别。