2011-01-21 45 views
0

我已经明白如何分析词法工作,yacc如何从语法规则中生成语法分析器?

,但不知道如何句法分析完成后,

虽然理论上讲,它们两者应相似(唯一的区别在于 类型的输入符号,字符或令牌),

但生成的解析器代码有很大不同。

尤其是yy_action,yy_lookahead,有一个在词法分析没有这样的事情......

回答

1

用来生成词法分析器的文法通常是regular grammars,而用于生成syntatic分析仪的语法一般都是context-free grammars。虽然它们在表面看起来可能相同,但它们的特征和能力却非常不同。普通语法可以被deterministic finite automatons识别,这些语法的构造和制作相对简单。上下文无关语法对构建识别器具有更大的挑战性,并且通常解析器生成器工具将仅为上下文无关语法的一个子集构建解析器。例如,yacc为使用push-down automata的LALR(1)语法的上下文无关文法构造解析器。

有关分析的更多信息,我会强烈建议Parsing Techniques,它通过在痛苦的解析(但是很好的描述!)细节的所有细微差别散步。