编译原理 —— 语义分析
2019-02-03 11:17
120 查看
分析语句和声明是如何构成程序的
收集标识符的属性信息
- 种属 简单变量
- 复合变量
- 过程
-
整型
使用符号表和字符串表来存储这些信息
符号表中Name字段为什么要设计字符串表,而不是将标识符直接放到Name字段中?
- 必要性:现代程序语言一般不限制标识符的长度,故name字段的长度不便预先固定,短了:适用范围小,长了:浪费空间、降低查询效率。将标识符的字面值单独放在字符串表中,其位置索引放在name字段中,可保证name长度固定,并由此带来存储效率高、查询方便的优点
- 可行性:语义分析中较少使用标识符的字面值,故在name字段中不保存标识符字面值是合理的
语义检查
- 变量或过程未经声明就使用
- 变量或过程名重复声明
- 运算分量类型不匹配
- 操作符与操作数之间的类型不匹配 数组下标不是整数
- 对非数组变量使用数组访问操作符
- 对非过程名使用过程调用操作符
- 过程调用的参数类型或数目不匹配
- 函数返回类型有误
转载地址:
https://www.icourse163.org/learn/HIT-1002123007?tid=1003246005#/learn/announce
相关文章推荐
- 编译原理之词法分析、语法分析、语义分析
- 编译原理结构框架7语义分析与中间代码生成
- 编译原理实验二:语义分析
- 语义分析和中间代码生成——哈工大编译原理课程(三)
- 编译原理---语义分析
- 编译原理-词法分析-语法分析-语义分析生成中间代码-python版
- 编译原理语义分析(文本输入)源程序
- 编译原理之词法分析、语法分析、语义分析
- 编译原理语义分析
- 编译原理之语法,语义,词法分析
- 编译原理课程设计 基于Java的LL(1)文法预测分析程序
- 编译原理 预测分析 源代码c 语言
- 编译原理 实验一 词法分析
- 简单算符优先文法分析程序(编译原理)
- 编译原理之表达式语法分析(一)——自顶向下
- GCC/G++编译原理分析
- 编译原理语法分析实验(Java实现)
- 编译原理语法分析
- 关于编译原理 递归下将分析程序
- 编译原理根据项目集规范族构造LR(0)分析表