编译原理(一)

来源:互联网 发布:mind mapping破解软件 编辑:程序博客网 时间:2024/04/30 09:43

说明:本文参考 李文生 老师讲义!如有不当之处请及时联系

程序设计语言

人与计算机之间沟通的工具。

低级语言

  • 机器语言
  • 符号语言 汇编语言

问题:符号语言是什么?

高级语言

  • 过程性语言——面向用户的语言 如:C、Pascal
  • 专用语言——面向问题的语言 如: SQL

优点:

  • 独立于机器。所编程序移植性比较好
  • 不必考虑存储单元的分配问题,数据的外部形势转换成机器的内部形势等细节
  • 具有丰富的数据结构和控制结构
  • 更接近于自然语言
  • 编程效率高

翻译程序

源程序(高级语言/汇编语言编写)———(经过)翻译程序——>(得到)目标程序(目标语言表示,此处目标不一定是机器语言)

汇编语言程序——汇编程序——机器语言程序

高级语言程序——编译程序——低级语言程序

高级语言程序:编译阶段处理源程序,执行阶段处理数据。

解释程序同时处理源程序和数据。边解释边执行,不生成目标程序。

解释程序的优缺点

 优点:与用户通信方便,比较节省内存空间 缺点:效率很低 解决办法:先翻译成某种中间形式的程序,如JAVA

编译程序的组成

  1. 分析阶段(静态分析)

    根据源语言的定义,分析源程序的结构和语义(程序源码转换为某种内部表示)

    • 词法分析——词法分析器——识别具有独立意义的字符串作为token(记号),并组织成记号流
    • 语法分析——语法分析器——将记号流根据相应语言的语法规则分组,形成语法短语——分析树来表示
    • 语义分析——语义分析器——根据源语言的语义规则对语句的意义进行检查(如类型检查)
  2. 综合阶段

    根据分析结果构造出所要求的目标程序

    • 中间代码生成——中间代码易于翻译成目标代码
    • 代码优化——对代码进行改进,使之占用的空间少、运行速度快(首先是在中间代码上进行)
    • 目标代码生成——生成的目标代码一般是可以重定位的机器代码或汇编语言代码
  3. 符号表的管理

  4. 错误诊断和处理

编译原理的典型结构
这里写图片描述

符号表管理

记录源程序中使用的标识符;收集每个标识符的各种属性信息是编译程序的重要工作。

符号表:若干记录组成的数据结构

  • 每个标识符在表中有一条记录
  • 记录的域是标识符的属性

对符号表结构的要求:

  • 允许快速地查找到标识符的记录
  • 可在其中存取数据

标识符的各种属性是在编译的各个不同阶段填入符号表的。

预处理器

主要功能:

  • 宏处理
  • 文件包含
  • 语言扩充

连接装配程序

两个主要任务:

  1. 装入:

    • 读入 可重定位的机器代码
    • 修改重定位地址
    • 把修改后的指令和数据放在内存的适当地方或形成可执行文件
  2. 连接

    • 把几个可重定位的机器代码连接成一个可执行的程序
0 0
原创粉丝点击