编译原理-第一章-引论

编译原理

第一章 引论

1,概念简介

(1) 编译器:一个编译器就是一个程序,它可以阅读以某一种语言(源语言)编写的程序,并把该程序翻译成为一个等价的、用另一种语言(目标语言)编写的程序。

2,一个编译器的结构

2.1 分析与综合

(1)编译器把源程序映射为在语义上等价的目标程序,映射过程由两个部分组成:分析部分和综合部分。

(2)分析部分(analysis)把源程序分解成为多个组成要素,并在这些要素之上加上语法结构,然后,创建该源程序的一个中间表示。

​ 分析部分还会收集有关源程序的信息,并把信息存放在一个称为符号表(symbol table)的数据结构中。符号表和中间表示形式一起传送给综合部分。

(3) 综合部分(synthesis)根据中间表示和符号表中的信息来构造用户期待的目标程序。

(4) 分析部分为编译器的前端(front end),综合部分为编译器的后端(back end)。

2.2 词法分析

(1)编译器的第一个步骤称为词法分析(lexical analysis)或扫描(scanning)。

(2)词法分析器读入组成源程序的字节流,并且将它们组织成为有意义的词素(lexeme)的序列。对于每个词素,词法分析器产生词法单元(token)作为输出;

<token-name, attribute-value>

其中,

  • token-name词法单元名,是一个有语法分析步骤使用的抽象符号
  • attribute-value词法单元值,是指向符号表中关于这个词法单元的条目。符号表条目的信息会被语义分析和代码生成步骤使用。

2.3 语法分析

(1)编译器的第二个步骤称为语法分析(syntax analysis)或解析(parsing)。

(2)语法分析器使用由词法分析器生成的各个词法单元的token-name来创建树形的中间表示,该中间表示给出了词法分析产生的词法单元流的语法结构

(3) 编译器的后续步骤使用这个语法结构来帮助分析源程序,并生成目标程序。

2.4 语义分析

(1) 语义分析器(semantic analyzer)使用语法树和符号表中的信息来检查源程序是否和语言定义的语义一致

(2) 收集类型信息,并把这些信息存放在语法树或符号表中,以便在随后的中间代码生成。

(3) 语义分析一个重要部分类型检查(type checking)。编译器检查每个运算符是否具有匹配的运算分量。

2.5 中间代码生成

(1)在把一个源程序翻译成目标代码的过程中,一个编译器可能构造出一个或多个中间表示,中间表示可以有多种形式。

2.6 代码优化

(1) 机器无关的代码优化步骤试图改进中间代码,以便生成更好的目标代码。

2.7 代码生成

(1) 代码生成器以源程序的中间表示形式作为输入,并把它映射到目标语言。

(2) 若目标语言是机器代码,那么必须为程序使用的每个变量选择寄存器或内存位置。然后,中间指令被翻译成为能够完成相同任务的机器指令序列。

2.8 符号表

(1) 编译器的重要功能之一是记录源程序中使用的变量的名字,并收集 和每个名字的各种属性有关的信息

(2) 属性可以提供一个名字存储分配、类型、作用域(即在程序的哪些地方可以使用这个名字的值)等信息。

(3) 过程名字信息:参数数量和类型、每个参数的传递方式(传值、传引用)以及返回值类型。

(4) 符号表数据结构为每个变量名字创建了一个记录条目记录的字段就是名字的各个属性

---- 阅读体验更好的PDF版链接

https://download.csdn.net/download/qq_43352441/14774043
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值