我已经理解了词法分析是如何运作的,
但不知道语法分析是如何完成的,
虽然原则上他们两个应该相似(唯一的区别在于 输入符号,字符或标记的类型。),但生成的解析器代码差异很大。
特别是yy_action,yy_lookahead
,在词汇分析中没有这样的东西......
答案 0 :(得分:1)
用于生成词法分析器的语法通常为regular grammars,而用于生成合成分析器的语法通常为context-free grammars。尽管它们在表面看起来可能相同,但它们具有非常不同的特征和能力。 deterministic finite automatons可以识别常规语法,这些语法构造起来相对简单并且速度很快。无上下文语法对于构建识别器更具挑战性,并且通常解析器生成器工具将仅为无上下文语法的子集构造解析器。例如,yacc使用push-down automata为无上下文语法构造解析器,这些语法也是LALR(1)语法。
有关解析的更多信息,我强烈推荐Parsing Techniques,它详细介绍了解析(但描述得很好!)细节的所有细微差别。