-
1.什么是编译程序、翻译程序、解释程序?
-
执行高级程序的一般步骤分为两步:
-
第一步,用一个编译程序把高级语言翻译成机器语言程序;
-
第二步,运行所得的机器语言程序求得计算结果。
-
**翻译程序:**把某一种语言程序转换成另一种语言程序;
-
**编译程序:**把某种高级语言程序等价的转换为另一种低级语言程序
-
**解释程序:**也是一种翻译程序,它将源程序作为输入,但不产生目标程序,即边解释边执行源程序本身。
-
编译过程概述?
- 第一阶段:词法分析
- **任务:**输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词。如基本字{begin,end,if,for,while等}、标识符、常数、算符和界符
- **依循的规则:**构词规则
- **描述工具:**有限自动机
- 第二阶段:语法分析
- **任务:**在词法分析的基础上,根据语言的与法规侧,把单词符号串分解成各类语法单位,如“短语”、“子句”、“句子”、“程序段”和“程序”等。
- **依循的规则:**语法规则
- **描述规则:**上下文无关文法
- 第三阶段:语义分析与中间代码产生
- **任务:**对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)
- **依循的规则:**语义规则
- **描述工具:**属性文法
- 第四阶段:优化
- **任务:**在于对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效(省空间和时间)的目标代码。
- **依循的规则:**程序的等价变换规则
- **优化的主要方面有:**公共子表达式的提取、循环优化、删除无用代码。
- 第五阶段:目标代码生成
- **任务:**把中间代码(或经优化处理后)变换成特定机器上的低级语言代码。
- 第一阶段:词法分析
-
编译前端与后端
- 源语言——>中间语言——>目标语言
-
如何学习构造编译程序?
- 1.源语言、2.标语言、3.编译方法
-
上下文无关文法
-
1.文法是描述语言的语法结构的形式规则(即语法规则)这些文法必须是准确的,易于理解的,而且应当有相当强的描述能力。
-
2.有利于句子分析和翻译
-
3.最好能通过这些规则自动产生有效的语法分析程序。
-
4.所谓上下文无关文法是这样一种文法,它所定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境的。
-
5.但对于现今的程序语言来说,上下无关文法基本上是够用了。
-
6.归纳起来,一个上下文无关文法G包括四个组成部分:一组终结符号、一组非终结符号、一个开始符号、一组产生式。
-
-
形式语言鸟瞰
-
分为四类:
-
0型:短语文法
-
1型:上下文无关文法
-
2型:上下文无关文法,非确定下推自动机
-
3型:正规文法
-
-
-
构造不带回溯的自上而下分析的文法条件:
-
1、文法不含左递归
-
2、对于文法中每一个非终结符A的各个产生式的各候选首符集两两不想交。
-
3、对文法中的每个非终结符A若他存在某个候选首符集合包含ε,则FIRST(A)∩FOLLOW(A)=Φ
-
-
什么叫做算符优先算法?
-
1、一种简单直观、广为使用的自下而上分析法,叫做算符优先分析法。
-
2、特别有利于表达式分析
-
3、易于手工实现、
-
4、算符优先分析法不是一种规范规约法。
-
-
LR文法
-
1、对于一个文法如果能够构造一张LR分析表,使得它的每个入口均是唯一确定的,则我们将把这个文法称为LR文法描述。
-
2、LR文法肯定是无二义的。一个二义文法绝不会是LR的。
-
-
活前缀
- **概念:**是指规范句型的一个前缀,这种前缀不含句柄之后的任何符号。之所以称为活前缀,是因为在右边增添一些终极符号之后,就可以使它成为一个规范句型。
-
什么是属性文法:
-
1.它是上下文无关文法的基础上,为每个文法符号(终结符或非终结符)配备若干相关的“值”(称为属性)。
-
2.属性与变量一样,可以进行计算和传递。
-
3.属性加工的过程即是语义处理的过程。对于文法的每个产生式都配备了一组属性的计算规则,称为语义规则。
-
属性通常分为两类:综合属性和继承属性。
-
语义规则:翻译
-
-
基于属性文法的处理方法;
-
基于属性文法的处理过程通常是这样的:对单词符号串进行语法分析,构造语法分析树,然后更具需要遍历语法树并在语法树的各个结点处按语义规则进行计算。
-
这种由源程序的语法结构所驱动的处理方法就是语法制导翻译法。
-
-
中间代码的好处。(为什么一次性不翻译成最终语言形式?为什么由中间代码?
-
虽然源程序可以直接翻译为目标语言代码,但是许多编译程序却采用了独立与机器的、复杂性介于源语言和机器语言之间的中间语言。这样做的好处是:
-
1.便于进行与机器无关的代码优化工作。
-
2.使编译程序改变目标机更容易。
-
3.使编译程序的结构在逻辑上更为简单明确。以中间语言为界面,编译前段和后端的接口更清晰。
-
-
优化
- 对程序进行各种等价变换,使得从变换后的程序出发,能生成更有效的目标代码,我们通常称为优化。
- 优化的级别:
- 局部优化
- 循环优化
- 全局优化
【无标题】
最新推荐文章于 2024-07-03 16:17:13 发布