首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图理解词汇者、解析树和语法树

试图理解词汇者、解析树和语法树
EN

Stack Overflow用户
提问于 2013-11-12 06:38:41
回答 1查看 908关注 0票数 2

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

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

侧边注意:在构建AST时,整个程序是构建成一个巨大的AST,还是每个语句/表达式构建了不同的AST?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-16 00:07:06

严格地说,词汇者也是解析者。词汇者和解析者之间的区别在于他们所操作的内容。在词汇世界中,一切都是由单个字符组成的,然后通过将它们与它所理解的常规语法匹配来标记这些字符。对于一个解析器来说,这个世界是由标记组成的,它通过将它们与它所理解的上下文无关的语法匹配,从而形成一个语法树。从这个意义上说,他们都在做同样的事情,但在不同的层次上。事实上,您可以在解析器之上构建解析器,在更高的层次上操作,这样在最高级别的语法中,一个符号就可以在最底层表示一些非常复杂的东西。

关于你的其他问题:

  • 是的,具体的语法树就是解析树。
  • 通常,解析器为整个文件创建一个树,因为这表示CFG中的一个句子。不过,情况并不一定总是如此。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19922520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档