我正在阅读面向模式的软件架构中的管道和过滤器架构模式。在这里我不必知道编译器设计,但作者给出了编译器设计的例子。我遵循了大部分内容,但我很难理解以下内容。
在编译器设计中,我们有不同的阶段,如扫描器、解析器、语义分析、中间代码生成和后端(MIPS 后端、英特尔后端......)。
这里作者提到了前端阶段,解析器,语义分析,中间代码生成。后端是 MIPS 后端。
以下是文本片段
我们决定不显式地构造抽象语法树,将其从解析器传递到语义分析器。相反,我们将对语义分析器(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.我只需要了解上面的语法规则它是做什么的?因为我不是设计语言,所以我必须了解模式。如果我对上面的例子有很好的理解,我可以有效地遵循模式吗?
感谢您的时间和帮助。