【北航编译原理笔记】4. 语义分析与符号表

    技术2022-07-16  68

    同系列链接

    【北航编译原理笔记】1. 基础知识 【北航编译原理笔记】2. 词法分析 【北航编译原理笔记】3. 语法分析 【北航编译原理笔记】4. 语义分析与符号表

    语义分析与符号表

    上下文有关分析(标识符的作用域)类型的一致性检查语义处理: 声明语句(登录名字的特征信息到符号表上), 执行语句(按某种操作的目标结构生成代码)

    非分程序结构: 主程序与子程序, 函数分开 分程序结构: 主程序与子程序, 函数嵌套

    作用域分 静态作用域(c, c++) 和 动态作用域(python)

    遇到声明语句填符号表

    填表前查表, 在同一作用域内是否重复定义检查名字种类和说明是否一致对于强类型语言,检查表达式中各变量的类型是否一致生成目标指令时,取得所需要的地址

    非分程序结构语言的符号表组织

    子程序, 函数名, 公共区名 填入 全局符号表在子程序(函数)声明部分的标识符 填入 局部符号表在语句部分的标识符 先查局部符号表,再查全局符号表程序单元结束时,释放局部符号表程序编译完成时,释放全局符号表

    无序符号表(查找(n+1)/2) 有序符号表(线性查找(n+1)/2, 折半查找 l o g 2 n − 1 log_2n-1 log2n1) 散列符号表(Hash表)(查找1, 解决冲突)

    分程序结构语言的符号表组织

    标识符的作用域是定义该标识符的模块循环体应看作一层(模块)在程序声明部分读到标识符,只查本层符号表在语句中读到标识符, 先查本层符号表, 再查外层符号表

    栈式符号表: 对于不同层级的符号表, 后建先消

    散列符号表的栈式实现

    Processed: 0.009, SQL: 10