首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >语义分析器的构造

语义分析器的构造
EN

Stack Overflow用户
提问于 2018-04-07 19:06:30
回答 1查看 334关注 0票数 2

在学习编译器的过程中,一个人编写了一个简单的标记器和解析器(递归下降)。解析器构造一个抽象语法树。现在我要进行语义分析。然而,关于语义分析器的构造,我有几个问题。我应该在生成的抽象语法树上使用递归调用对代码进行语义分析,还是应该构造另一棵树(例如,使用访问者模式)来进行语义分析。我在网上发现了文件,它说我应该在解析过程中对代码进行语义分析,但它不符合单一责任规则,使整个解析器更容易出错。或者我应该把语义分析作为中间表示生成器的一部分?也许我错过了什么,如果有人能为我澄清这件事,我将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-07 23:43:46

你在学习。保持简单;构建一棵树,并在解析完成后在树上运行语义分析器。

如果您决定(某一天)构建一个快速编译器,您可能会考虑在解析时实现一些语义分析。这使得构建解析器和语义分析器变得更加困难,因为它们现在正在进行交互(如果您想生病,了解为什么大多数C++解析器都是用所谓的"lexer hack“实现的。是一个更好的词)。您还会发现,有时您所需要的信息是不可用的(“到目前为止,该goto的目标已经定义了吗?”因此,在运行解析时,您通常无法完成一个完整的工作,或者您可能不得不将一些语义处理推迟到解析的后面,这是很难安排的。我不建议在编译器的早期教育中增加这种复杂性。

从简单开始,集中学习什么是语义分析。

当您清楚地知道需要优化什么以及为什么要优化时,您可以稍后进行优化。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49710982

复制
相关文章

相似问题

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