编译原理学习笔记(四)语义分析

语义分析的任务

对抽象语法树进行分析,检查有无语义错误,上下文相关属性,如变量使用前是否声明,函数参数是否一致等。
需要两个输入,一个是语法树,一个是程序语言的语义。输出为中间代码。

实现方法

通过类型检查算法和符号表来实现检查。
类型检查算法用来检查每个表达式或语句的类型是什么,是否符合规范。

符号表

用来存储程序中各个变量的相关信息,如类型,作用域,访问控制信息,是一种key-value结构。
节省时间,可以用哈希表,节省空间,可以用红黑树。
符号表处理作用域的方法:一是用一张表,进入作用域就插入元素,离开作用域就删除元素,二是用多张表,构成一个栈,进入作用域就插入一张新表,离开就删除栈顶的表。
符号表处理名字空间的方法:引入标签,标号来区别不同类型。

分享到