试图理解词法分析器,解析树和语法树

时间:2013-11-12 06:38:42

标签: parsing compiler-construction lexer abstract-syntax-tree

我正在阅读“龙书”,我想我理解词法分析器,解析树和语法树的主要观点以及它们通常应该捕获的错误(假设我们使用的是无上下文语言),但如果我错了,我需要有人来抓我。我的理解是词法分析器简单地标记输入并捕获与代码中的无效结构有关的错误,例如以不包含分号的语言传递的分号。解析树用于验证语法是否遵循,代码的顺序是否正确,语法树用于实际评估代码中的语句和表达式,并生成3地址代码或机器代码等内容。这些都是正确的吗?

旁注:具体语法树和解析树是一回事吗?

Side-Side注意:构建AST时,整个程序是否构建到一个巨型AST中,或者是每个语句/表达式构造的不同AST?

1 个答案:

答案 0 :(得分:2)

严格来说,词法分析器也是解析器。词法分析器和解析器之间的区别在于它们的操作。在词法分析器的世界中,一切都由单个字符组成,然后通过将它们与它理解的常规语法相匹配来进行标记。对于解析器来说,世界由令牌构成,它通过将它们与它理解的无上下文语法相匹配而形成语法树。从这个意义上说,他们都在做同样的事情,但在不同的层面。实际上,您可以在解析器之上构建解析器,在更高和更高级别运行,因此最高级别语法中的一个符号可以表示最低级别的非常复杂的内容。

提出其他问题:

  • 是的,具体的语法树是一个解析树。
  • 通常,解析器会 整个文件的一棵树,因为它代表了一个句子 CFG。但情况并非总是如此。