【发布时间】:2012-10-03 13:21:24
【问题描述】:
我正在阅读面向模式的软件架构中的管道和过滤器架构模式。在这里我不必知道编译器设计,但作者给出了编译器设计的例子。大部分我都跟着,但我很难理解下面的内容。
在编译器设计中,我们有不同的阶段,例如扫描器、解析器、语义分析、中间代码生成和后端(MIPS 后端、英特尔后端...)。
这里作者提到了前端阶段,解析器,语义分析,中间代码生成。后端是 MIPS 后端。
下面是文本sn-p
我们决定不显式地构造抽象语法树,将其从解析器传递到语义分析器。相反,我们将对语义分析器(sa)和代码生成器(cg)的调用嵌入到 yacc 的语法规则中:
addexpr : team
| addexpr '+' term
{ sa.checkCompat($1,$3); cg.genAdd($1,$3);}
| addexpr '-' term
{ sa.checkCompat($1,$3); cg.genSub($1,$3);}
我对上述文字的问题 1. 作者所说的“不显式构造抽象树”是什么意思? 2.我只需要了解上面的语法规则它是做什么的?因为我不是设计语言,所以我必须了解模式。如果我对上面的例子有很好的理解,我可以有效地遵循模式吗?
感谢您的时间和帮助。
【问题讨论】:
标签: architecture semantic-analysis