分析语句和声明是如何构成程序的

收集标识符的属性信息

  • 种属
    • 简单变量
    • 复合变量
    • 过程
  • 类型
    • 整型
    • 实型
    • 字符型
    • 布尔型
    • 指针型
  • 存储位置、长度
  • 作用域
  • 参数和返回值信息

使用符号表字符串表来存储这些信息
编译原理 —— 语义分析

符号表中Name字段为什么要设计字符串表,而不是将标识符直接放到Name字段中?

  • 必要性:现代程序语言一般不限制标识符的长度,故name字段的长度不便预先固定,短了:适用范围小,长了:浪费空间、降低查询效率。将标识符的字面值单独放在字符串表中,其位置索引放在name字段中,可保证name长度固定,并由此带来存储效率高、查询方便的优点
  • 可行性:语义分析中较少使用标识符的字面值,故在name字段中不保存标识符字面值是合理的

语义检查

  • 变量或过程未经声明就使用
  • 变量或过程名重复声明
  • 运算分量类型不匹配
  • 操作符与操作数之间的类型不匹配
    • 数组下标不是整数
    • 对非数组变量使用数组访问操作符
    • 对非过程名使用过程调用操作符
    • 过程调用的参数类型或数目不匹配
    • 函数返回类型有误

转载地址:

https://www.icourse163.org/learn/HIT-1002123007?tid=1003246005#/learn/announce

相关文章:

  • 2021-07-22
  • 2021-05-25
  • 2021-11-25
  • 2021-08-17
  • 2021-06-08
  • 2021-05-09
  • 2021-10-21
  • 2021-06-26
猜你喜欢
  • 2022-01-23
  • 2021-08-21
  • 2021-04-03
  • 2021-07-20
  • 2021-06-10
  • 2021-10-27
  • 2022-01-01
  • 2021-08-26
相关资源
相似解决方案