Skip to content

语义分析

字数
527 字
阅读时间
3 分钟

语义分析的主要任务

  1. 收集标识符的属性信息
    1. 种属(Kind)
      • 简单变量、复合变量(数组、记录、...)、过程、...
    2. 类型(Type)
      • 整型、实型、字符型、布尔型、指针型、...
    3. 存储位置、长度
    4. 作用域
    5. 参数和返回值信息
      • 参数个数、参数类型、参数传递方式、返回值类型、...
  2. 语义检查
    • 常见错误:
      1. 变量或过程未经声明就使用
      2. 变量或过程名重复声明
      3. 运算分量类型不匹配
        • 例如:错把数组与过程相加,属于无意义操作,类型不匹配
        • 有些错误可用自动类型转换解决
      4. 操作符操作数之间的类型不匹配 例如:
        1. 数组下标不是整数
        2. 非数组变量使用数组访问操作符
        3. 非过程名使用过程调用操作符
        4. 过程调用的参数类型或数目不匹配
        5. 函数返回类型有错误
  • 例:
    • real:实型变量 每位占用8个字节
    • integer:整型变量 每位占用4个字节
  • 语义分析收集到的这些标识符的信息都会存储到一个符号表中,每一个标识符对应符号表的一条记录,记录的每一个字段都对应着标识符的一个属性
    • 符号表通常带有一个字符串表,用来存放程序中用到的标志符和字符常数(橙底字上方的那一行就是字符串表)
    • 如图中例子所示:NAME字段分为两部分,左部用来存放标识符在字符串表中的起始位置,右部用来存放标识符的长度

贡献者

The avatar of contributor named as freeway348 freeway348

文件历史

撰写