编译原理——概述

基本概念

  • 编译:把源程序转换为目标程序的过程
  • 翻译程序:扫描所输入的源程序,将其转换为目标程序或者直接翻译成结果
    编译原理——概述_第1张图片
    • 编译程序:即编译器,将源程序翻译成目标程序的翻译器;源程序和数据分开处理
      编译原理——概述_第2张图片
    • 解释程序:解释器,直接执行源程序的翻译器,不生成目标程序,同时处理源程序和数据
  • 翻译过程
    • 高级语言程序——编译程序——>低级语言程序
    • 汇编语言——汇编程序——>机器语言程序
  • 编译的阶段和任务
  • 分析阶段
    * 语法分析
    * 词法分析
    * 语义分析
  • 综合阶段
    * 中间代码生成
    * 代码优化
    * 目标代码生成
  • 符号表的管理
  • 错误诊断和处理

编译原理——概述_第3张图片

  • 分析阶段:对源程序进行结构分析和语义分析,从而把源程序正文转换为某种内部表示形式

    • 语法分析:依次读入源程序的每个字符,对构成源程序的字符进行分解,并识别出来特殊的字符串,例如变量名

      • 空格:被删去
      • 注释:被跳过
      • 识别出来的标识符放入符号表,并对某些加上属性值
    • 词法分析:层次结构分析,根据语法进行分组

    • 语义分析:对语句的意义进行检查

      • 类型检查
        • 每个运算符和运算对象是否符合要求
        • 数组下标是否合法
        • 形参实参是否匹配,类型是否匹配
  • 综合阶段

    • 中间代码生成:一种抽象的机器程序
    • 代码优化:对代码进行改进,使其占用空间少,运行速度快
    • 目标代码生成:一般生成可以重定位的机器代码或者汇编语言代码
      • 对程序使用的每个变量要指定存储单元
      • 对变量进行存储器分配
  • 符号表管理

    • 记录源程序使用的标识符
    • 收集每个标识符的各种属性信息
  • 错误处理

    • 词法分析检测出来的非法字符错误
    • 语法分析出来的不符合语法规则错误
    • 语义分析出来的操作无意义的结构
    • 代码生成程序检测出来的目标程序区超范围,计算机容量限制
  • 其他概念

    • 前端:编译程序中与源程序语言有关,与目标机器无关的部分
    • 后端:编译程序中与目标机器有关的部分
    • :对源程序或者中间形式从头到尾扫描一遍,并作加工处理,生成新的中间形式或者目标程序
      编译原理——概述_第4张图片
  • 预处理器

    • 宏处理器:主要处理宏定义和宏调用
    • 文件包含:主要把文件的包含声明扩展为程序正文
      • 例如用#include 时,就用stdio.h的内容替换此语句
    • 语言扩充:用更先进的控制流和数据结构来增强原来的语言。
  • 汇编程序

    • 助记符表示操作码。标识符表示存储地址
  • 连接装配程序

    • 读入
      • 读入可重定位的机器代码
      • 修改重定位地址
      • 把修改后的指令和数据存放在适当的地方或者形成可执行文件
    • 连接
      * –把几个可重定位的机器代码文件连接成一个可执行的程序

你可能感兴趣的:(编译原理)