语义分析
和中间代码生成
可以同时进行,称为语义翻译语法分析
、语义分析
、中间代码生成
可以同时进行,称为语法制导翻译
参考:
- SDT中的语义分析,和中间代码生成绑到一块了;
- 在花括号中执行语义动作(可以包括生成中间代码和类型检查),就认为是计算了节点属性;
参考:第三个回答
- 而属性是什么完全是看需求来的。
预备知识:
-
PLY不会为用户生成符号表,参考龙书P53知符号表不一定要在词法分析时创建,可以在语法分析时创建,每次遇到标识符的声明即在符号表中创建一个该标识符的条目,符号表参考要检查的错误类型确定其数据类型,P56标明使用SDT和使用符号表的关系
- 在语法分析构建语法分析树时添加语义动作,包括类型检查和中间代码生成。添加的动作在parser.py中尽量简洁,可以引入自定义模块,使用该模块中的方法。
参考: 在语法树上实现SDT部分
语义分析需要检查的错误类型:
- 声明时看是否重复声明,否则添加声明,
- 使用变量时看是否声明
- 赋值时判断两边类型是否一致
- 对方法查看是否有该内置方法,
- 方法的参数类型,个数是否正确
所有错误类型参考:
参考:
语义分析错误类型:
语法制导翻译过程:
编译原理国外系列教程,含SDT:
自己动手开发编译器之语义分析,含JAVA代码:
阿里大佬写的语法树和分析树,解释器的实现
语义分析总结性博客:
AST到中间代码生成,以js为例:
没看的,SDT的介绍:
编译器优化
可以参考的资料: