编译原理答案.docx
《编译原理答案.docx》由会员分享,可在线阅读,更多相关《编译原理答案.docx(14页珍藏版)》请在冰豆网上搜索。
编译原理答案
编译原理答案(总11页)
一、填空题
1. 汇编程序将 翻译成 ;编译程序将 翻译成 。
2. 编译程序工作工程可以划分为 、 、 、 和 等5个基本阶段,同时还会伴有 和 。
3. 对编译程序而言,输入数据是 ,输出数据是 。
4. 已知文法G[E]:
E—>T|E+T|E-F, T->F|T*F|T/F,,F—>(E)|I(“,”是间隔符号,不是文法中的符号)。
该文法的开始符号(识别字符)是 ,终结符号集合VT是 ,非终结符号结合VN是 ,句型T+T*F+i的短语有 。
该文法消除直接左递归,改写后的文法为E-> ,T-> ,F-> .
5. Chomsky定以来寺中形式语言的文法分别为:
文法(又称 文法)、 文法(又称 文法)、 文法(又称 文法)、 文法(又称 文法)。
6. 编译过程中扫描器所完成的任务是从 中识别出一个个具有 。
7. 确定的有穷自动机是一个 ,通常表示为 。
8. LL(k)分析中,第一个L的含义是 ,第二个L的含义是 ,“k”的含义是 。
9. LL
(1)分析中,第一个L的含义是 ,第二个L的含义是 ,“1”的含义是 。
(0)分析中,“L”的含义是 ,“R”的含义是 ,“0”的含义是 。
(1)分析中,“L”的含义是 ,“R”的含义是 ,“1”的含义是 。
(1)分析中,“L”的含义是 ,“R”的含义是 ,“1”的含义是 。
13.算术表达式:
a*(-b+c)的逆波兰式表示为:
。
14.算术表达式:
a+b*(c+d/e)的逆波兰式表示为:
。
15.在编译程序中安排中间代码生成的目的是 和 。
16.语法制导的翻译程序能同时进行 分析和 分析。
17.根据所涉及的程序范围,优化可分为 、 、 三种。
二、简单题
1. 有人认为编译程序的词法分析、语法分析、语义分析和中间代码生成、代码优化、目标代码生成五个组成部分是缺一不可的,这种看法正确吗说明理由。
2. 多边扫描的程序是高质量的编译程序,优于单遍扫描的编译程序”,对吗为什么
3. LR分析器与优先分析器在识别被归约串时的主要异同时什么
三、给出生成下述语言的上下文无关的文法
{1n0m1m0n|n,m>=0}
{WaWr|W属于{0|1}*,Wr表示W的逆}
四、给出生成下列语言的三型文法:
{an|n>=0}
{anbm|n,m>0}
{anbmck|n,m,k>=0}
五、构造正规式1(0|1)*101相应的最小DFA。
六、构造正规式b(a|b)*bab相应的最小DFA。
七、已知文法G[S]:
S->aH;H->aMd|d;M->Ab|ε;A->aM|e.
1. 求每个非终结符号的FIRST集和FOLLOW集;
2. 判定该文法是否为LL
(1)文法,如是,构造LL
(1)预测分析表;
3. 若是LL
(1)文法,请给出输入串aaabd#的预测分析过程,并说明该输入是G[S]的句子。
八、已知文法G[B]:
B->BoT|T;T->TaF|F;F->nF|(B)|t|f。
1. 计算G[B]的FIRSTVT和LASTVT;
2. 构造G[B]的算符优先关系表并说明G[B]是否为算符有限文法;
3. 若是算符优先文法,请给出输入ntofat#的分析过程,并说明该输入是G[B]的句子。
九、文法G[S]:
S->AB;A->aBa|ε;B->bAb|ε.
1.引入产生式S’->S,对文法进行改造为G[S’],计算G[S’]的First和Follow集,由此判断该文法是否是SLR
(1)文法;
2.构造G[S’]的项目集族和识别活前缀的DFA;
3.若是SLR
(1)文法,请构造它的分析表;
4.给出输入baab#的SLR
(1)分析过程。
十、对下图的流图:
1. 求出流图个节点的n的必经节点集D(n);
2. 求出流图的回边;
3. 求出流图中的循环。
十一、将下面的程序段划分为基本块并作出其程序流图。
ReadA,B
F:
=1
C:
=A*A
D:
=B*B
IfCE=A*A
F=F+1
E:
=E+f
WriteE
Halt
L1:
E:
=B*B
F:
=F+2
WriteE
IfE>100gotoL2
Halt
L2:
F:
=F-1
GotoL1
十二、有下面基本块:
S0:
=2
S1:
=3/S0
S2:
=T-C
S3:
=T+C
R:
=S0/S3
H:
=R
S4:
=3/S1
S5:
=T+C
S6:
=S4/S5
H:
=S6*S2
1. 应用DAG对其进行优化,写出优化后的基本块中四元式;
2. 假定只有R、H在基本块出口式活跃的,写出优化后的四元式序列
十三、翻译下列关于LEX一点介绍的英文。
2.LexSource.
ThegeneralformatofLexsourceis:
{definitions}
%%
{rules}
%%
{usersubroutines}
wherethedefinitionsandtheusersubroutinesareoftenomitted.Thesecond%%isoptional,butthefirstisrequiredtomarkthebeginningoftherules.TheabsoluteminimumLexprogramisthus
%%
(nodefinitions,norules)whichtranslatesintoaprogramwhichcopiestheinputtotheoutputunchanged.
IntheoutlineofLexprogramsshownabove,therulesrepresenttheuser’scontroldecisions;theyareatable,inwhichtheleftcolumncontainsregularexpressions(seesection3)andtherightcolumncontainsactions,programfragmentstobeexecutedwhentheexpressionsarerecognized.Thusanindividualrulemightappear
integer printf("foundkeywordINT");
tolookforthestringintegerintheinputstreamandprintthemessage‘‘foundkeywordINT’’wheneveritappears.InthisexamplethehostprocedurallanguageisCandtheClibraryfunctionprintfisusedtoprintthestring.Theendoftheexpressionisindicatedbythefirstblankortabcharacter.IftheactionismerelyasingleCexpression,itcanjustbegivenontherightsideoftheline;ifitiscompound,ortakesmorethanaline,itshouldbeenclosedinbraces.Asaslightlymoreusefulexample,supposeitisdesiredtochangeanumberofwordsfromBritishtoAmericanspelling.Lexrulessuchas
colour printf("color");
mechanise printf("mechanize");
petrol printf("gas");
wouldbeastart.Theserulesarenotquiteenough,sincethewordpetroleumwouldbecomegaseum;awayofdealingwiththiswillbedescribedlater.
十四、翻译下列有关yacc的一些英文介绍。
Introduction
YACCisshortforYetAnotherCompilerCompiler. Apunonthenumberofcompiler,orparser,constructiontoolsthatwerebeingcreatedatthetime. Itisatoolthat,givenaBNF(Backus-NaurForm)stylespecificationofagrammar,cangenerateacorrespondingparser. ItisworthnotingthatYACCwillnotaccepteverygrammarpresentedtoit. Farfromit. Howevertheclassofgrammarsthatitdoesacceptisgenerallypowerfulenoughformostprogrammingneeds.
YACCwasoriginallywrittenbyS.C.JohnsononaUNIXplatform. ItiscloselytiedinwithLex. Alexicalanalysergeneratingtool. SincethentherehavebeenmanyflavoursofYACCimplemented. PerhapsthemostnotablebeingBISONandBYACC.
YACCgenerateswhataretermedLRparsers. Thismeansthattheyscantheinputfromlefttoright,theLbit,andproducearightmostderivationfromthebottomup,theRbit. LRparsersarealsocalledbottom-upparsers. TheyaresomewhatdifferenttoLLparsers. SimilartoLRparsersthesealsoscantheinputfromlefttoright,butthistimeconstructaleftmostderivationinstead. LLparsersarealsocalledtopdownparsers. Theyhavethedistinctadvantagethattheycangenerallybeimplementedbyhand. Thereareanumberoftechniquesfordoingthisincludingpredictiveparsingandrecursivedescentparsing. TherearenowalsoanumberoftoolswhichcanconstructLLparsersautomatically. Havingsaidallthis,itisgenerallyatimeconsumingtasktocodeaparserbyhand,andanLRparserconstructiontechniqueisinherentlymorepowerfulthananLLone.
Forbothtypesofparser,eitherLRorLL,thereisgenerallyanextrapieceofinformationwhichspecifieshowmanylookaheadtokenstheparserusestodecidewhatactiontoperform. ForinstanceanLR
(1)parserusesonetokenoflookahead. ThisanimportantpointbecauseYACCgeneratesaparserwhichusesonetokenoflookaheadaswell. Thatistheparsermustdecide,giventhesymbolsthatithasalreadyseen,andthecurrentlookaheadtokenwhatitneedstodonext.
答案
编译原理A卷参考答案及评分参考2008年12月,朱明放
一、1.汇编语言的程序,机器语言的程序;高级语言的程序,汇编语言或机器语言的程序
2.源程序,目标程序。
{+,-,*,/,i,(,)},{E,T,F},短语:
T+T*F+i,T+T*F,T,T*F,i,
4.从左到右的扫描,分析过程采用最左推导,需要向右查看一个符号便可决定如何推导。
5.从左到右的扫描,分析过程采用最右推导的逆过程-最左规约,向后查看0个符号决定分析动作。
6.ab!
c+*
7.局部优化,循环优化,全局优化
二、错。
在这5个部分中,词法分析,语法分析,语义分析和目标代码生成是必须的,代码优化是为了提高目标代码的质量而引入的,不是必须的,没有代码优化编译程序同样生成目标代码。
三.产生式的集合P:
S→0S0|aSa|a。
四、→aS|ε。
2.S→aS|aA|ab,A→bA|ε。
五、解:
步骤上先NFA,确定化,最小化。
对于本题确定化后即最小了。
0
X
1
2
3
4
5
Y
1
ε
1
ε
1
0
1
NFA
1
X
A
B
C
Y
1
0
1
0
1
DFA
1
0
0
六、解:
(S’)={a,b,ε},First(S)={a,b,ε},First(A)={a,ε},First(B)={b,ε};
Follow(S’)={#},Follow(S)={#},Follow(A)={#,b},Follow(B)={a,#}.
2.构造活前缀的DFA如下,项目集为每个节点内的项目。
项目集0,2,3,5中存在移近-规约冲突。
在I0和I5中,因为Follow(A)={b,#}与Select(A->.aBa)交集为空;I2和I3中select(B->.bAb)交Select(B->.)为空,这样所用的移近规约冲突解决了,因此是SLR
(1)文法。
3.构造分析表如下:
4.对aaabd#的预测分析过程如下:
七、解:
D
(1)={1},D
(2)={1,2},D(3)={1,2,3},D(4)={1,2,3,4},D(5)={1,2,3,5},D(6)={1,2,3,6},D(7)={1,2,7},D(8)={1,2,7,8}
回边:
7→2;
循环:
{2,3,4,5,6,7}
八、1基本块的DAG图如下。
优化后四元式序列为:
S0:
=2
S4:
=2
S1:
=
S2:
=T-C
S3=T+C
S5:
=S3
R=2/S3
S6:
=R
H:
=S6*S2
2.优化后的四元式序列为:
S2:
=T-C
S3=T+C
R=2/S3
H:
=R*S2
九、略。
能翻译点大意就得分。