我正在阅读“龙书”,我想我理解了词汇树、解析树和语法树的要点,以及它们通常应该捕获的错误(假设我们使用的是上下文无关的语言),但如果我错了,我需要有人来抓我。我的理解是,lexer只是简单地标记输入并捕获与代码中的无效构造有关的错误,例如在不包含分号的语言中传递分号。解析树用于验证语法是否遵循,代码的顺序是否正确,语法树用于实际计算代码中的语句和表达式,并生成类似于3地址代码或机器代码的内容。这些都是对的吗?
旁注:具体语法树和解析树是同一回事吗?
侧边注意:在构建AST时,整个程序是构建成一个巨大的AST,还是每个语句/表达式构建了不同的AST?
发布于 2013-11-16 00:07:06
严格地说,词汇者也是解析者。词汇者和解析者之间的区别在于他们所操作的内容。在词汇世界中,一切都是由单个字符组成的,然后通过将它们与它所理解的常规语法匹配来标记这些字符。对于一个解析器来说,这个世界是由标记组成的,它通过将它们与它所理解的上下文无关的语法匹配,从而形成一个语法树。从这个意义上说,他们都在做同样的事情,但在不同的层次上。事实上,您可以在解析器之上构建解析器,在更高的层次上操作,这样在最高级别的语法中,一个符号就可以在最底层表示一些非常复杂的东西。
关于你的其他问题:
https://stackoverflow.com/questions/19922520
复制相似问题