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

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

注意:具体语法树和解析树是同一个东西吗?

Side-Side note:在构建AST时,整个程序是否构建在一个巨大的AST中,或者是为每个语句/表达式构建的不同的AST?


严格来说,词法分析器也是解析器。 词法分析器和解析器的区别在于它们的操作。 在词法分析器的世界里,所有东西都是由单个字符组成的,然后通过将它们匹配到它理解的常规语法来标记。 对于一个解析器来说,世界是由令牌构成的,它通过将它们与它所理解的上下文无关文法进行匹配而使语法树变得无用。 从这个意义上说,他们都在做同样的事情,但在不同的层面上。 实际上,您可以在解析器之上构建解析器,在更高和更高的级别上运行,因此最高级语法中的一个符号可以表示最底层的难度极其复杂的事物。

对于其他问题:

  • 是的,具体的语法树是一个分析树。
  • 通常,解析器为整个文件创建一棵树,因为它代表了CFG中的一个句子。 但这并不总是如此。
  • 链接地址: http://www.djcxy.com/p/68207.html

    上一篇: Trying to understand lexers, parse trees and syntax trees

    下一篇: Parser and abstract syntax tree