【VIP专享】08计算机函授编译原理A卷答案及评分标准
编译原理考试试卷+答案A卷

编译原理期末试卷1.给出LL(1)分析方法的总控流程图。
(5分)2.按指定类型给出下列语言的文法。
(10分)(1) L1={ ca n b m| n≥0,m>0 } 用正规文法。
S→cA A→aA|aB|a B→bB|b(2) L2={ 0n a 1n b m| n>0,m ≥0} 用二型文法。
S→0S1B|0a1 B→bB|c3.文法G[S]为:(10分)S→SdT | T T→T<G | G G→(S) | a试给出句型adT<(S)的短语、简单(直接)短语、句柄和最左素短语。
短语:a, T, (S), T<(S), adT<(S) 直接短语:a, (S) 句柄:a 最左素短语:a 4.将文法G[S] 改写为等价的G'[S],使G'[S]不含左递归和左公共因子。
(5分)S→[A A→B]|AS B→aB|+aS→[A A→B]A’A’→SA’|εB→aB|+a5.判断下面文法是否为LL(1)文法,若是,请构造相应的LL(1)分析表,并写出aabbb 的分析过程。
(10分)S→aD D→STe|ε T→bM M→bH H→M|ε6.简述编译程序概念及构成。
(10分)编译程序是现代计算机系统的基本组成部分.从功能上看,一个编译程序就是一个语言翻译程序,它把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序.7.设G=(V N,V T,P,<S>)是上下文无关文法,产生式集合P中任意一个产生式应具有什么样的形式?若G是正则文法呢?(10分)2型(上下文无关):规则形式:A→βA ∈VN,β∈ (VT⋃VN)*3型(右线性):A→aB或A→a(右线性)A→Ba或A→a (左线性)a ∈VT⋃{ε}8.为文法G[E]:(10分)V → N | N[E] E → V | V+E N → i构造递归下降识别程序E( ){ V( ); if symbol = ‘+’E( ); }V( ){ N(); if symbol = ‘[’ { E(); if symbol != ‘]’error(); }N( ){ if symbol != ‘i ’ error(); }/* 这样的写法很简化,当文法提取左公因子后,需要计算相关非终结符的Follow 集,才能确定什么时候用空串规则推导。
2009-2010编译原理A卷及答案汇总

南昌航空大学2009 —2010 学年第二学期期末考试课程名称:编译原理 闭卷 A 卷 120 分钟一、 填空题(每空2分,共24分)1、一个上下文无关文法G 包括四个组成部分:一组终结符号,一组非终结符号,一个______________,以及一组产生式。
(2分)2、 自下而上分析方法的基本思想是:从输入符号串开始,利用文法规则逐步进行归约,直至归约到文法的______________。
(2分)3、自顶向下的语法分析方法的基本思想是:从文法的_____ _开始,根据给定的输入串并按照文法的产生式一步一步的向下进行_____ _,试图推导出文法的___ ___,使之与给定的输入串______。
(8分)4、S -属性文法中的每个文法符号,只含有______________ 属性。
(2分)5、对于文法的每个产生式都配备了一组属性的计算规则,称为 _____ 。
(2分)6、通过一便扫描来产生布尔表达式的代码主要问题在于,当生成某些转移语句时可能不知道该语句将要转移到的标号究竟是什么。
为了解决这个问题可以采用______________技术。
(2分)7、a*(b-c)的后缀式为______________。
(2分)8、假定G 是一个文法,S 是它的开始符号。
如果S α*⇒,则称α是一个______________。
仅含______________的句型是一个句子。
(2分)二、选择题(每题2分,共20分)1、_____是两类程序语言处理程序。
A.高级语言程序和低级语言程序B.解释程序和编译程序C.编译程序和操作系统D.系统程序和应用程序2、一个句型中的最左_____称为该句型的句柄。
A.短语B.简单短语C.素短语D.终结符号3.若一个文法是递归的,则它所产生的语言的句子_____。
A.是无穷多个B.是有穷多个 C.是可枚举的D.个数是常量4、在自底向上的语法分析方法中,分析的关键是_____。
A.寻找句柄B.寻找句型C.消除递归D.选择候选式5、若a为终结符,则A->α·aβ为_____项目。
编译原理(A卷)答案

湖北第二师范学院2014-2015学年度第二学期《编译原理》课程考试答案(A卷) 院系:计算机学院专业班级:学生姓名:学号:考试方式:闭卷………………………………………………………………………………………………………………一、填空题(每空1分,共10分)1.词法分析程序是逐个识别(字符),形成单词级别的(字符)串,词法分析程序输出的数据是(2 )个,它们分别是(种别编码)和(自身值)。
2.语法分析程序是逐个识别(单词),形成语句级别的(单词)串。
3.一遍扫描的编译方法,是以语法分析程序为主,调用(词法分析)程序、语义分析程序,再由语义程序调用中间代码生成、中间代码优化等。
4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即(静态存储分配)方案和(动态存储分配)方案。
二、综合题(共90分)1.(5分)将下面文法改写成3型文法:G=({S,A,B},{a,b,c,d,e},P,S)其中:P={S→abcA|edB,A→beB,B→d}答案:改写后的3型文法是(5分)G=({S,A,B,C,D,E,F},{a,b,c,d,e},P,S)其中:P={S→aC|eF, C→bD,D→cA,A→bE,E→eB,F→dB,B→d}2.(5分)给出下面表达式的四元式形式:a*b+(c-d)/e答案:四元式形式(5分)(*,a,b,t1)(-,c,d,t2)(/,t2,e,t3)(+,t1,t3,t4)3.(30分)给定文法 G[E] :E → E+T | E-T | TT → T*F | T/F | FF → (E) | i该文法是 LL(1) 文法吗?为什么?不是的能否改造为LL(1)文法,如果能够改造,给出改造后的文法,并给出改造后文法是LL(1)文法的证明过程。
无论改造前还是改造后的文法,如果是LL(1)文法,则给出(i+i)*i的分析过程(要求给出详细过程,并给出LL(1)的分析表)答案:(1)该文法不是LL(1)文法,因为文法的产生式含有左递归(2分)(2)该文法可改造为LL(1)文法,即消除左递归,改造后的文法是(3分)E → TE’E’→ +TE’ | -TE’ | εT → FT’T’→ *FT’ | /FT’ |εF → (E) | i证明改造后的文法是LL(1)文法的过程A.求可达ε的非终结符(1分)可达的是E’,T’B.求每个非终结符的First集合(3分)First(E)={ (,i}First(E’)={+,-}First(T)={ (,i}First(T’)={*,/}First(F)={ (,i}C.求每个产生式右部字符串的First集合(3分)First(TE’)={ (,i}First(+TE’)={+}First(-TE’)={-}First(FT’)={ (,i}First(*FT’)={*}First(/FT’)={/}First((E))={ ( }First(i)={ i }First(ε)={ ε}D.求每个非终结符的Follow集合(3分)Follow(E)={$,)}Follow(E’)= Follow(E)={$,)}Follow(T)=First(E’) ∪ Follow(E)={$,+,-,)}Follow(T’)= Follow(T)={$,+,-,)}Follow(F)= First(T’) ∪ Follow(T)={$,+,-, *,/,)}E.求每个非终结符的Select集合(5分)Select(E → TE’)=First(TE’)={ (,i }Select(E’→ +TE’)=First(+TE’)={ + }Select(E’→ -TE’)=First(-TE’)={ - }Select(E’→ε)=First(ε)-{ ε} ∪ Follow(E’)={ $,) }Select(T → FT’)=First(FT’)={ (,i }Select(T’→ *FT’)=First(*FT’)={ * }Select(T’→ /FT’)=First(/FT’)={ / }Select(T’→ε)=First(ε)-{ ε} ∪ Follow(T’)={ $,+,-,) }Select(F → (E))=First((E))={ ( }Select(F → i)=First(TE’)={ i }F.求有多个产生式的非终结符Select集合的交集(2分)显然有Select(E’→ +TE’)∩Select(E’→ -TE’) ∩Select(E’→ε)=ΦSelect(T’→ *FT’) ∩Select(T’→ /FT’) ∩Select(T’→ε)= ΦSelect(F → (E))= ∩Select(F → i)= Φ所以改造后的文法是LL(1)文法4.(10分)对下面的NFA进行确定化答题:第1第25.(15分)给定文法 G[E] :E → E+T | E-T | TT → T*F | T/F | F该文法是算符优先文法吗?是,则构造该文法的算符优先关系矩阵,并给出(i+i)*i的分析过程(要求给出详细过程)答案:(1)该文法是算符优先文法(1分)(2)构造该文法的算符优先矩阵A.求各非终结符的FirstVT集合(3分)FirstVT(E)={+,-,*,/,(,i}FirstVT(T)={*,/,(,i}FirstVT(F)={(,i}B.求各非终结符的LasttVT集合(3分)LastVT(E)={ +,-,*,/,),i }LastVT(T)={ *,/,),i }LastVT(F)={ ),i }C.构造优先关系表(4分)6.(25分)给定文法 G[E] :T → T*F | FF → (E) | i该文法是LR(0)文法吗?是,则构造该文法的LR(0)分析表,并给出(i+i)*i的分析过程,不是的,是SLR(1)文法吗,是,则构造该文法的SLR(1)分析表,并给出(i+i)*i的分析过程。
《编译原理》考试试题及答案

《编译原理》考试试题及答案(附录)一、判断题:1.一个上下文无关文法的开始符,可以是终结符或非终结符。
( X )2.一个句型的直接短语是唯一的。
( X )3.已经证明文法的二义性是可判定的。
( X )4.每个基本块可用一个DAG表示。
(√)5.每个过程的活动记录的体积在编译时可静态确定。
(√)6.2型文法一定是3型文法。
( x )7.一个句型一定句子。
( X )8.算符优先分析法每次都是对句柄进行归约。
(应是最左素短语) ( X )9.采用三元式实现三地址代码时,不利于对中间代码进行优化。
(√)10.编译过程中,语法分析器的任务是分析单词是怎样构成的。
( x )11.一个优先表一定存在相应的优先函数。
( x )12.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
( )13.递归下降分析法是一种自下而上分析法。
( )14.并不是每个文法都能改写成LL(1)文法。
( )15.每个基本块只有一个入口和一个出口。
( )16.一个LL(1)文法一定是无二义的。
( )17.逆波兰法表示的表达试亦称前缀式。
( )18.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
( )19.正规文法产生的语言都可以用上下文无关文法来描述。
( )20.一个优先表一定存在相应的优先函数。
( )21.3型文法一定是2型文法。
( )22.如果一个文法存在某个句子对应两棵不同的语法树,则文法是二义性的。
( )二、填空题:1.( 最右推导 )称为规范推导。
2.编译过程可分为(词法分析),(语法分析),(语义分析和中间代码生成),(代码优化)和(目标代码生成)五个阶段。
3.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是()。
4.从功能上说,程序语言的语句大体可分为()语句和()语句两大类。
5.语法分析器的输入是(),其输出是()。
6.扫描器的任务是从()中识别出一个个()。
编译原理试卷A参考答案

《编译原理》试卷A 参考答案注意事项:1. 请考生按要求在试卷装订线内填写姓名、学号和年级专业。
2. 请仔细阅读各种题目的回答要求,在规定的位置填写答案。
3. 不要在试卷上乱写乱画,不要在装订线内填写无关的内容。
4. 满分100分,考试时间为120分钟。
题号一二三四总分统分人得分一、单项选择题(每小题2分共20分)1.中间代码生成所依据的是语言的(C )。
A: 词法规则B: 语法规则C: 语义规则D: 产生式规则2.词法分析器的加工对象是(C )。
A: 中间代码B: 单词C: 源程序D: 元程序3.同正则表达式a*b*等价的文法是(C )。
A: G1: S aS|bS|εB: G2: S aSb|εC: G3: S aS|Sb|εD: G4: S abS|ε4.文法G[A]:A→b A→bH H H →BA B→Ab H →a 不是(B ):A: 2型文法B: 正规文法C: 0型文法D: 1型文法5.算符优先分析每次都是对(算符优先分析每次都是对( B B B )进行规约。
)进行规约。
A: A: 短语短语短语 B: B: B: 最左素短语最左素短语最左素短语 C: C: C: 素短语素短语素短语 D: D: D: 句柄句柄6.一个LR (1)文法合并同心集后,如果不是LALR(1)文法必定存在(B ):A: 移进-归约冲突B: 归约-归约冲突C: 识别句型D: 收集类型信息7.下列不属于类型检查范畴的描述是(C )。
A: 运算符的分量类型的相容性B: 形参和实参类型的相容性C :形参和实参的个数的一致性D: 赋值语句的左右部类型的相容性8.( B B )不是)不是DFA 的成分。
A:A:有穷字母表有穷字母表有穷字母表 B: B: B:初始状态集合初始状态集合C:C:终止状态集合终止状态集合终止状态集合 D: D: D:有限状态集合有限状态集合9.若B 为非终结符,则A α.B β为(为( B B B )项目。
编译原理期末考试试卷及答案

期末考试试卷(A)卷一、填空题(每小题2分,共20分)1、字母表∑,用∑*表示∑上所有有穷长的串集合,∑*称为∑的①。
2、设z=abc,则z的固有头是①。
3、如何由语言基本符号组成程序中各个语法成分(包括程序)的一组规则叫①。
4、设∑={a,b},∑上的正规式(a|b)(a|b) 相应的正规集为①5、NFA的映象f是从"状态×字"映射到"状态子集",f为①值函数。
6、LR分析是按规范句型的①为可归约串。
7、结点的①属性值由该结点的兄弟结点和父结点的属性值计算。
8、如果分析树中一结点的属性b依赖于属性c,那么这个结点的属性b的语义规则的计算必须在定义属性c的语义规则的计算①。
9、对于栈式符号表,引入一个显示嵌套层次关系表- ①表,该表总是指向当前正在处理的最内层的过程的子符号表在栈符号表中的起始位置。
10、任一有向边序列n1 → n2,n2 → n3,…,nk-1 → nk为从结点n1到结点nk的一条通路。
如果n1=nk,则称该通路为①。
二、单项选择(每小题2分,共14分)1、乔姆斯基把文法分成4种类型,即0型、1型、2型和3型。
其中3型文法也称为()。
A.上下无关文法 B.正规文法C.上下文有关文法 D.无限制文法2、生成非0开头的正偶数集的文法是()。
A. Z::=ABC B. Z::=ABCC::=0|2|4|6|8 C::=0|2|4|6|8B::=BA|B0|ε B::=BA|B0|0A::=1|2|3|…|9 A::=1|2|3|…|9C. Z::=ABC|2|4|6|8D. Z::=ABC|2|4|6|8C::=0|2|4|6|8 C::=0|2|4|6|8B::=BA|B0|0 B::=BA|B0|εA::=1|2|3|…|9 A::=1|2|3|…|93、简单优先分析法从左到右扫描输入串,当栈顶出现()时进归约。
A.素短语B.直接短语C.句柄D.最左素短语4、同心集合并有可能产生新的()冲突。
编译原理期末A试卷答案
黄冈师范学院2012—2013学年度第一学期期末试卷参考答案考试课程:编译原理考核类型:考试A卷考试形式:闭卷出卷教师:牛冀平考试专业:计算机科学与技术,软件工程考试班级:计科201001班,软件201001班一、填空(每空0.5分,共 10分)1、编译程序的功能是是对(高级语言)进行翻译,使之生成目标代码。
2、编译程序的工作过程一般划分为5个阶段:(词法分析)、语法分析、语义分析与中间代码生成,(代码优化)及目标代码生成。
另外还有表格管理和(出错处理)。
3、一个上下文无关文法所含四个组成部分是一组终结符号、一组(非终结符号)、一个开始符号、(一组产生式)。
4、设G是一个给定的文法,S是文法的开始符号,如果S=> x(其中x∈V*),则称x 是文法的一个(句型)。
5、规范归约中的可归约串是指句柄,算符优先分析中的可归约串是指(最左素短语)。
6、在编译过程中,可采用的中间代码形式有()、()、()等。
(三元式、间接三元式、四元式、逆波兰式、抽象语法树)(任选三个即可)7、语法分析最常用的两类方法是(自上而下)和(自下而上)分析法。
8、表达式(a+b)*c的后缀表达式为(ab+c*)。
9、符号表的结构一般有(线性表)、(有序表)、(散列表或哈希表)等。
分别使用的查找方法有(顺序查找)、(折半查找)和(哈希法查找)10、代码优化的目的是(减少代码的时空开销)。
11、寄存器是CPU内部的(存储单元),其访问时间小于CPU对内存的访问时间。
12、如果一个句子存在两棵不同的语法树就说明该句子是(二义性)的。
二、选择题(每题1分,共10分)1、文法的开始符号经多步推导产生的文法符号序列(仅包含终结符)是文法的(D )。
A.短语B.句柄C.句型D.句子2、构造编译程序应掌握(D)。
A.源程序B.目标语言C.编译方法D.以上三项都是3、不属于循环优化的主要方法的是(B)。
A.强度削弱B.删除无用赋值C.删除归纳变量D.代码外提4、使用(A)可以定义一个程序的含义。
编译原理试卷A(考试专用)
4.文法的属性有和。
5.根据所涉与程序的范围,优化可分为局部优化、和全局优化三种。
得分
二、选择题(每小题2分,共10分)
1.描述语言{≥1}的文法为( )。
A.B.
C.D.ε
2.以10结尾的二进制数串为( )。
A.(0|1)*01B.(0|1)*10C.01(0|1)*D.10(0|1)*
()
p();
1; ;
23; p(); a .
A.2和8 B.2和9 C.7和9 D.7和8
得分
三、判断并改错(每小题2分,共10分)
1.文法的二义性和语言的二义性是两个相同的概念。
2.图中运算符,操作符可作为终端结点。
3.和所含的终态结点可以是若干个。
4.存在一个优先关系表就一定存在优先函数与之对应。
G(M):
M →
T → |
B → | |
D → d |
4.给出赋值语句 *()的四元式表示形式。(5分)
5.设文法G(S):(15分)
1)构造各非终结符的和集合;
2)构造优先关系表。
3)该文法是算法优先文法吗?
6.设有基本块(5分)
T1:=2
T2:=10
T3:=S-R
T4:=S+R
A:=T2* T4
编译原理考试试卷(A卷)
2009— 2010学年第一学期
科目:编译原理计算机系_计算机科学与技术专业_级班
题号
一
二
三
四
总分
得分
阅卷人
得分
一、填空题(每空1分,共10分)
1.编译程序的工作的过程一般可以划分为词法分析、、、、等几个基本阶段,同时还会伴有和出错处理。
编译原理考试题及答案
编译原理考试题及答案一、选择题(每题5分,共20分)1. 编译器的主要功能是什么?A. 代码优化B. 代码翻译C. 代码调试D. 代码运行答案:B2. 下列哪个选项不属于编译器的前端部分?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D3. 在编译原理中,文法的产生式通常表示为:A. A -> αB. A -> βC. A -> γD. A -> δ答案:A4. 下列哪个算法用于构建语法分析树?A. LL(1)分析B. LR(1)分析C. SLR(1)分析D. LALR(1)分析答案:A二、填空题(每空5分,共20分)1. 编译器的前端通常包括词法分析、语法分析和________。
答案:语义分析2. 编译器的后端主要负责________和目标代码生成。
答案:代码优化3. 编译器中的词法分析器通常使用________算法来识别单词。
答案:有限自动机4. 语法分析中,________分析是一种自顶向下的分析方法。
答案:递归下降三、简答题(每题10分,共30分)1. 简述编译器的作用。
答案:编译器的主要作用是将高级语言编写的源代码转换成计算机能够理解的低级语言或机器代码,以便执行。
2. 解释一下什么是语法制导翻译。
答案:语法制导翻译是一种翻译技术,它利用源语言的语法信息来指导翻译过程,使得翻译过程能够更好地理解源代码的语义。
3. 什么是词法分析器?答案:词法分析器是编译器前端的一部分,它的任务是将源代码文本分解成一系列的标记(tokens),这些标记是源代码的最小有意义的单位。
四、计算题(每题10分,共30分)1. 给定一个简单的文法G(E):E → E + T | TT → T * F | FF → (E) | id请计算文法的非终结符号E的FIRST集和FOLLOW集。
答案:E的FIRST集为{(, id},FOLLOW集为{), +, $}。
2. 假设编译器在进行语法分析时,遇到一个语法错误的代码片段,请简述编译器如何处理这种情况。
2008~2009学年度第二学期《编译原理》考试试卷答案-A
华中科技大学文华学院2008~2009学年度第二学期《编译原理》考试试卷(A卷)标准答案和评分课程性质:(必修)使用范围:(本科)考试时间:2009 年5月日考试方式:(闭卷)学号__________年级专业____________班级________姓名____________ 一、单选题(将正确的答案的字母,填入题干的下划线中。
每题2分,共14分)1.语言学家Chomsky将文法和语言分为四大类,其中3型文法又称为D。
A.无限制文法B.上下文有关文法C.上下文无关文法D.正规文法2.设有文法G[S]:S→(T)|a|∧,T→TbS|S,则FOLLOW(S)= B。
A.{ ),b } B.{ ),b,# } C.{ ),a,# } D.{ ( , b }3.在语法分析方法中,算符优先分析法采用A文法。
A.OPG B.LL(1) C.LR(0) D.LR(1)4.对程序中的表达式的识别工作,编译程序通常都在A阶段完成。
A.语法分析B.语义分析C.词法分析D.目标代码的生成5.自下而上语法分析的工作原理是C。
A.“移进—推导法”B.“最左推导法”C.“移进—规约法”D.“推导—规约法”6.已知∑={a,b},与文法G[S]:S→Sa| Sb| a等价的正规式是C。
A.ab*B.ba* C.a(a|b)*D.aa*|b*7.LR分析法每次都是对当前句型的B进行规约。
A.素短语B.句柄C.短语D.最左素短语二、填空题(每空2分,共22分)1.已知文法G[S]:S →(A)|a ,A →AcS|S|b ;该文法的开始符号是 S ,非终结符号集合为 {S,A},终结符号集合为{a,b,c,(,)}。
2.描述源程序中的单词结构有3种方法:有穷自动机,正规式和正规文法。
3.自上而下的语法分析方法有LL(1)和递归下降方法。
4.设有文法G[S]:S →Sa|a ,构造它的拓广文法,引入一个产生式:S ˊ→S ;则I 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2008计算机函授本科编译原理期末试卷(A)答案及评分标准
一、填空题(20分,每空2分)
1、传值;传地址
2、从左向右分析;最右推导的逆过程;向右查看K个输入符
3、二义性的
4、最左素短语
5、200
6、aab*d-abd*-*d/-
7、词法分析器
二、选择题(20分,每个选项2分)
1、D
2、B
3、D
4、B
5、C
6、C
7、C
8、D
9、D10、A
三、简答题(10分)
1、 因为存在推导序列: E E+T E + * F 所以E+T*F是文法G[E]的一个句型(2分) 句型E+T*F的
短语有:E+T*F,T*F (2分)
直接短语有:T*F (1分)
句柄为:T*F(1分)
2、最左推导
N=>ND=>NDD=>NDDD=>DDDD=>0DD D=>06DD=>062D=>0625 (2分)
最右推导
N=>ND=>N5=>ND5=>N25=>ND25=>N6 25=>D625=>0625 (2分)
四、综合应用题(50分)
1、解:对应的NFA(6分),确定化后的DFA(9分)如图所示
(4分)
3、%{
#include <stdio.h>
%}
digit [0-9] (2分)
number 350-{digit}{15}\n (3分)
%%
{number} { printf("该身份证号码是福建省的身份证号码\n"); } (1分)
.*\n {printf("该身份证号码不是福建省的身份证号码\n");} (1分)
%%
main()
{yylex();
return 0;} (2分)
int yywrap()
{ return 1;} (1分)
4、编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;中间代码生成;代码优化;目标代码生
成。
主要是进行词法分析和语法分析,又称为源程序分析,分析过
程中发现有语法错误,给出提示信息。
(1)词法分析
词法分析的任务是对由字符组成的单词进行处理,从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号串的中间程序。
执行词法分析的程序称为词法分析程序或扫描器。
源程序中的单词符号经扫描器分析,一般产生二元式:单词种别;单词自身的值。
单词种别通常用整数编码,如果一个种别只含一个单词符号,那么对这个单词符号,种别编码就完全代表它自身的值了。
若一个种别含有许多个单词符号,那么,对于它的每个单词符号,除了给出种别编码以外,还应给出自身的值。
词法分析器一般来说有两种方法构造:手工构造和自动生成。
手工构造可使用状态图进行工作,自动生成使用确定的有限自动机来实现。
(2)语法分析
编译程序的语法分析器以单词符号作为输入,分析单词符号串是否形成符合语法规则的语法单位,如表达式、赋值、循环等,最后看是否构成一个符合要求的程序,按该语言使用的语法规则分析检查每条语句是否有正确的逻辑结构,程序是最终的一个语法单位。
编译程序的语法规则可用上下文无关文法来刻画。
语法分析的方法分为两种:自上而下分析法和自下而上分析法。
自上而下就是从文法的开始符号出发,向下推导,推出句子。
而自下而上分析法采用的是移进归约法,基本思想是:用一个寄存符号的先进后出栈,把输入符号一个一个地移进栈里,当栈顶形成某个产生式的一个候选式时,即把栈顶的这一部分归约成该产生式的左邻
符号。
(3)中间代码生成
中间代码是源程序的一种内部表示,或称中间语言。
中间代码的作用是可使编译程序的结构在逻辑上更为简单明确,特别是可使目标代码的优化比较容易实现。
中间代码即为中间语言程序,中间语言的复杂性介于源程序语言和机器语言之间。
中间语言有多种形式,常见的有逆波兰记号、四元式、三元式和树。
(4)代码优化
代码优化是指对程序进行多种等价变换,使得从变换后的程序出发,能生成更有效的目标代码。
所谓等价,是指不改变程序的运行结果。
所谓有效,主要指目标代码运行时间较短,以及占用的存储空间较小。
这种变换称为优化。
有两类优化:一类是对语法分析后的中间代码进行优化,它不依赖于具体的计算机;另一类是在生成目标代码时进行的,它在很大程度上依赖于具体的计算机。
对于前一类优化,根据它所涉及的程序范围可分为局部优化、循环优化和全局优化三个不同的级别。
(5)目标代码生成
目标代码生成是编译的最后一个阶段。
目标代码生成器把语法分析后或优化后的中间代码变换成目标代码。
目标代码有三种形式:
①可以立即执行的机器语言代码,所有地址都重定位;
②待装配的机器语言模块,当需要执行时,由连接装入程序把它们和某些运行程序连接起来,转换成能执行的机器语言代码;
③汇编语言代码,须经过汇编程序汇编后,成为可执行的机器语言代码。
目标代码生成阶段应考虑直接影响到目标代码速度的三个问题:一
是如何生成较短的目标代码;二是如何充分利用计算机中的寄存器,减少目标代码访问存储单元的次数;三是如何充分利用计算机指令系统的特点,以提高目标代码的质量。