自学编译原理(一)——概述

来源:互联网 发布:网络犯罪破案率 编辑:程序博客网 时间:2024/05/18 00:43

自学编译原理(一)——概述

  • 编译器的大体结构

    编译程序是一个设计分析和综合的复杂系统。它通常由词法分析器、语法分析器、语义分析与中间代码生成器、代码优化器、目标代码生成器、出错处理器、符号表管理器组成。
    编译程序总体结构

  • 词法分析概述

    主要任务 从左向右逐行扫描源程序的字符,识别出各个单词,确定单词的类型,并将识别出的单词转换成统一的机内表示——词法单元(token)形式
    token: <种别码,属性值>
    token类别

    单词类型 种别 种别码 关键字 program if else then … 一词一码 标识符 变量名 数组名 记录名 过程名 … 多词一码 常量 整型 浮点型 字符型 布尔型 … 一型多码 运算符 算数(+ - * / ++ –) 关系(> < == != >= <=) 逻辑(& ~) 界限符 ; ( ) { } … 一词一码
  • 语法分析概述

    主要任务 语法分析器(parser)从词法分析器输出的tokken序列中识别出各类短语,并构造语法分析树(parse tree)
    语法分析树描述了句子的语法结构
    语法树示例

  • 语义分析概述

    主要任务

    • 收集标识符的属性信息
      • 种属(kind) 简单变量 复合变量(数组 记录 …) 过程 …
      • 类型(type) 整型 字符型 布尔型 指针型 …
      • 存储位置 长度
      • 作用域
      • 参数和返回信息
        收集到的属性信息存在符号表中
    • 语义检查
      • 变量或过程未经声明就使用
      • 变量或过程名重复声明
      • 运算分量类型不匹配
      • 操作符与操作数之间的类型不匹配
        - 数组下标不是整数
        - 对非数组变量使用数组访问操作符
        - 对非过程名使用过程调用操作符
        - 过程调用的参数类型或数目不匹配
        - 函数返回类型有误
  • 中间代码生成及编译后端概述

    中间表示形式 三地址码 语法结构树/语法树
    三地址码由类似于汇编语言的指令序列组成 每个指令最多有三个操作数
    三地址指令的表示
    四元式(op, y, z, x)

学习过程依照中国大学MOOC上哈工大开设的编译原理一课,参考书籍《编译原理》(蒋宗礼 姜守旭 编著)。

原创粉丝点击