一、编译器构造一般原理

本文详细介绍了编译器的工作原理,包括翻译器的分类,编译器的各个阶段如词法分析、语法分析、语义分析、中间代码生成和代码优化。还探讨了词法分析器、语法分析器和语义分析器的角色,以及文法的基本概念,如终结符、非终结符、产生式和文法分类。

一、编译器概述

1.翻译器(translator):把一种语言程序翻译成另一种语言程序。

2.编译器(compiler):高级语言变成低级语言。

3.解释器(interpreter):将语句一条一条直接执行,而不生成目标代码。

4.编译器阶段:源程序->词法分析->语法分析->语义分析->中间代码生成器->独立于机器代码优化器->代码生成器->依赖于机器代码优化器。

5.词法分析器(lexical analysis,scanner):

将字符序列转化为单词序列(token)的过程,如将position=initial+rate*60转化,通过词法分析器转化为如下

<id,1>,<=>,<id,2>,<+>,<id,3>,<*>,<60>,其中符号表为:1.position,2.initial,3.rate ...

6.语法分析器(syntactic analysis,parser):

将position=initial+rate*60经过词法分析得到的序列构造成一棵分析树(parse tree),如下

符号表:1.position,2.initial,3.rate ...(也包含类型信息)

7.语义分析器(semantic analysis):

输入语法树,输出也是语法树,收集标识符种属、类型、存储位置长度、值、参数返回等信息,存到符号表中,并进行语义检查。

8.中间代码生成器(intermediate code generator):将上述语法树生成中间代码如下(三地址指令)

t1=int-to-real(60)

t2=id3*t1

t3=id2+t2

id1=t3

9.代码优化器(code optimizer):中间代码优化器可得到如下

t1=id3*60.0

id1=id2+t1

10.代码生成器(code generator):生成汇编代码或机器码。

11.词法分析器与语法分析器关系:语法分析器作为主程序,调用词法分析器取下一个token,词法分析器取好返回给语法分析器,在这个过程期间它们都要访问符号表。(语法分析器后面还可能会调用语义分析器)

 

 

 

二、词法基本概念

1.字母表(alphabet):表示字母的集合,记号为Σ,若Σ={0,1}则字母表中只有0或1。

2.字母表乘积(product):Σ1Σ2=Σ3,则Σ3中存在两个字母,前一个字母在Σ1集合中,后一个字母在Σ2集合中。

3.字母表的幂(power):字母表的n次幂表示长度为n的符号串构成的集合,这些符号在字母表集合内。

4.字母表闭包(closure):由字母表中字母构成的所有串(包括空串),若为正(positive)闭包则不包含空串。

5.串(string):

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值