编译原理绪论

一.什么是编译

编译就是把高级语言(源语言)翻译成汇编语言或者机器语言(目标语言)的过程。
在这里插入图片描述

二.编译器的结构

人工翻译:
一个英文句子想要翻译成中文,首先你要知道该句子的意思,而要知道该句子的意思,就要分析源语言。得到句子的意思,亦即系中间状态,即可根据这个意思翻译成中文。

在这里插入图片描述

过程说明:
要得到句子的意思,
我们首先要知道句子的结构:
一个句子的核心在于谓语动词,知道了谓语动词,就等于知道了句子的一半意思。
知道了谓语动词,我们就会想知道动作的施事者和受事者,就是知道做了什么,然后就想知道时间地点人物,最后就能知道这个句子的大概意思,而这过程就叫做语义分析。

要想得到语义,前一步要做的就是要进行语法分析,分析出句子的各个成分,识别出主谓宾。
到了语义分析的时候,就根据先前分析的主谓宾等句子结构,得到句子的意思。

要得到句子的各个成分,首先要做的是识别各个单词的词性,这个过程叫做词法分析,根据各个单词的词性,可以得出各种拼接起来的短语,即名词短语、动词短语、介词短语,为语法分析做铺垫。
在这里插入图片描述

归纳一下:

要想得到句子的中间状态,即意思
第一步,词法分析,得到各个单词的词性,名词、动词、冠词、介词
第二部,语法分析,根据词法分析的结果,把各个单词组合起来,得到各种名词短语、动词 短语、介词短语
第三部,语义分析,分析从语法分析得到的各个短语,得到谓语动词,再去分析其他的短语 和谓语动词的关系,得到句子的主谓宾,从而得到句子的意思,即中间状态。

在这里插入图片描述

编译器的结构

以上步骤(词法分析->语法分析->语义分析->中间状态),称为编译器的前端,与源语言有关,最终翻译成中间状态,中间状态相当于一座桥梁,可根据不同的机器,生成出对应机器的机器语言。

在这里插入图片描述

词法分析

任务:生成出统一的机内表示(token序列)

词法分析就系从左到右逐行扫描程序的字符,识别出各个单词的词性,或者讲系类型。
然后将各个识别出来的单词转成统一的机内码(token序列)表示。

token : <种别码,属性码>
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

语法分析

任务:得到语法分析树

语法分析器根据词法分析器得到的token序列,识别出各个短语,并构造出语法分析树。
在这里插入图片描述
在这里插入图片描述

语义分析

有两种语句,一种是赋值语句,另一种是动作语句
任务:
1.收集标识符的属性信息
2.语义检查

收集标识符的属性信息
通过语法分析得到的语法分析树,识别出标识符的各种属性信息,生成对应的符号表和字符串表。
符号表负责存储标识符的各类属性。
字符串表存储各个标识符。

其中符号表只存储标识符在字符串表的起始位置以及长度,
估计是更换标识符时,只用更改标识符的名字,而不用修改或再次收集其属性

语义检查
语义检测则是负责检查程序的各类语法,看是否符合语法要求。

在这里插入图片描述

中间代码生成
在这里插入图片描述
在这里插入图片描述

中间代码对应于人类语言的中间表示形式,用于最终翻译成各类机器语言

三地址指令和汇编的表示形式类似,第一个操作数相当于谓语动词,而后面几个操作数就相当于句子的主语,宾语,补语,定语。

在这里插入图片描述
在这里插入图片描述

编译器后端

编译器后端负责将中间表示形式,映射到目标语言。

将代码进行优化,其中优化可以分为
1.对中间形式代码的优化
2.机器代码的优化
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值