编译原理作业20150515(答案)

合集下载

编译原理作业标准答案

编译原理作业标准答案

编译原理作业标准答案第一章引言一、解释下列各词源语言:编写源程序的语言(基本符号,关键字),各种程序设计语言都可以作为源语言。

源程序: 用接近自然语言(数学语言)的源语言(基本符号,关键字)编写的程序,它是翻译程序处理的对象。

目标程序: 目标程序是源程序经过翻译程序加工最后得到的程序。

目标程序(结果程序)一般可由计算机直接执行。

低级语言:机器语言和汇编语言。

高级语言:是人们根据描述实际问题的需要而设计的一个记号系统。

如同自然语言(接近数学语言和工程语言)一样,语言的基本单位是语句,由符号组和一组用来组织它们成为有确定意义的组合规则。

翻译程序: 能够把某一种语言程序(源语言程序)改变成另一种语言程序(目标语言程序),后者与前者在逻辑上是等价的。

其中包括:编译程序,解释程序,汇编程序。

编译程序: 把输入的源程序翻译成等价的目标程序(汇编语言或机器语言),然后再执行目标程序(先编译后执行),执行翻译工作的程序称为编译程序。

解释程序: 以该语言写的源程序作为输入,但不产生目标程序。

按源程序中语句动态顺序逐句的边解释边执行的过程,完成翻译工作的程序称为解释程序。

二、什么叫“遍”?指对源程序或源程序的中间形式(如单词,中间代码)从头到尾扫描一次,并作相应的加工处理,称为一遍。

三、简述编译程序的基本过程的任务。

编译程序的工作是指从输入源程序开始到输出目标程序为止的整个过程,整个过程可以划分5个阶段。

词法分析:输入源程序,进行词法分析,输出单词符号。

语法分析:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位,并判断输入串是否构成语法正确的“程序”。

中间代码生成:按照语义规则把语法分析器归约(或推导)出的语法单位翻译成一定形式的中间代码。

优化:对中间代码进行优化处理。

目标代码生成:把中间代码翻译成目标语言程序。

四、编译程序与解释程序的区别?编译程序生成目标程序后,再执行目标程序;然而解释程序不生成目标程序,边解释边执行。

北语15春《编译原理》作业1满分答案

北语15春《编译原理》作业1满分答案

15春《编译原理》作业1
单选题多选题判断题
一、单选题(共6 道试题,共24 分。


1. 审查每个算符是否具有语言规范允许的运算对象是()的工作。

A. 语法分析
B. 语义分析
C. 中间代码生成
D. 代码优化
E. 目标代码生成
-----------------选择:B
2. 编译程序是将高级语言程序翻译成( )。

A. 高级语言程序
B. 机器语言程序
C. 汇编语言程序
D. 汇编语言或机器语言程序
-----------------选择:D
3. 四元式之间的联系是通过_____实现的。

A. 指示器
B. 临时变量
C. 符号表
D. 程序变量
-----------------选择:B
4. 下列______优化方法不是针对循环优化进行的。

A. 强度削弱
B. 删除归纳变量
C. 删除多余运算
D. 代码外提
-----------------选择:C
5. 中间代码生成时所依据的是_____。

A. 语法规则
B. 词法规则
C. 语义规则
D. 等价变换规则
-----------------选择:C
6. 用高级语言编写的程序经编译后产生的程序叫_____。

A. 源程序
B. 目标程序
C. 连接程序
D. 解释程序
-----------------选择:B
15春《编译原理》作业1。

《编译原理》作业参考答案

《编译原理》作业参考答案

《编译原理》作业参考答案一、填空1.图二图一。

2.文法是无ε产生式,且任意两个终结符之间至多有一种优先关系的算符文法。

3.最右推导最右推导。

4.对于循环中的有些代码,如果它产生的结果在循环中是不变的,就把它提到循环外来。

把程序中执行时间较长的运算替换为执行时间较短的运算。

5.对于文法中的每个非终结符A的各个产生式的候选首符集两两不相交;对文法中的每个非终结符A,若它存在某个候选首符集包含ε,则FIRST(A)∩FOLLOW(A)= ø6.控制。

7.语义分析和中间代码产生8.自上而下自下而上自上而下9.自下而上表达式10.自下而上11.源程序单词符号12. DFA初态唯一,NFA初态不唯一;DFA弧标记为Σ上的元素,NFA弧标记为Σ*上的元素;DFA的函数为单射,NFA函数不是单射13.词法,词法分析器,子程序,语法14.ε,a,ab,ab15.终结符号,非终结符号,产生式16.L(G)={a n | n≥1}17.1型,2型,3型18.二义的19.快20.终态,输入字21.单词符号,终结符22.归约23.必须24.直接25.终结符,更快26.E→E+∙T, E→E∙+T, E→∙E+T, E→E+T∙27.归约—归约28.类型检查,一致性检查29.词法分析、词法30.语法分析程序、语法31。

终结符号、产生式、开始符号、非终结符32.2、2、333.不需要避开34.符合、不符合35.推导36.包括37.Ass38.一定没有、一定没有、至多只有一个39.SLR(1)40.移进——归约41.a.控制流检查、b.一致性检查、c.相关名字检查二、判断下面语法是否正确1 ×2 ×3 √4 ×5 √6 ×三、简答题1.词法分析的任务是对输入的源程序进行单词及其属性的识别,为下一步的语法分析进行铺垫;有两种方法可以实现词法分析器:一,手工编写词法分析程序。

二,由词法分析器自动生成程序生成。

《编译原理》课后习题答案第5章

《编译原理》课后习题答案第5章

《编译原理》课后习题答案第5章《编译原理》课后习题答案第5章.pdf《编译原理》课后习题答案第5章.pdf第5章自顶向下语法分析方法第1题对文法G[S] S→a|∧|(T) T→T,S|S(1) 给出(a,(a,a))和(((a,a),∧,(a)),a)的最左推导。

(2) 对文法G,进行改写,然后对每个非终结符写出不带回溯的递归子程序。

(3) 经改写后的文法是否是LL(1)的?给出它的预测分析表。

(4) 给出输入串(a,a)#的分析过程,并说明该串是否为G的句子。

答案:(1) 对(a,(a,a)的最左推导为:S(T) (T,S) (S,S) (a,S) (a,(T)) (a,(T,S)) (a,(S,S)) (a,(a,S)) (a,(a,a))对(((a,a),∧,(a)),a) 的最左推导为:S(T) (T,S) (S,S) ((T),S) ((T,S),S) ((T,S,S),S) ((S,S,S),S) (((T),S,S),S) (((T,S),S,S),S) (((S,S),S,S),S) (((a,S),S,S),S) (((a,a),S,S),S) (((a,a),∧,S),S) (((a,a),∧,(T)),S)(((a,a),∧,(S)),S)《编译原理》课后习题答案第5章.pdf《编译原理》课后习题答案第5章.pdf(((a,a),∧,(a)),S) (((a,a),∧,(a)),a)(2) 改写文法为:0) S→a 1) S→∧ 2) S→( T ) 3) T→S N 4) N→, S N 5) N→ε非终结符FIRST集FOLLOW集S {a,∧,(} {#,,,)} T {a,∧,(} {)} N {,,ε} {)}对左部为N的产生式可知:FIRST (→, S N)={,} FIRST (→ε)={ε} FOLLOW (N)={)}由于SELECT(N →, S N)∩SELECT(N →ε) ={,}∩ { )}= 所以文法是LL(1)的。

编译原理(清华大学-第2版)课后习题答案

编译原理(清华大学-第2版)课后习题答案

编译原理(清华⼤学-第2版)课后习题答案第三章N=>D=> {0,1,2,3,4,5,6,7,8,9}N=>ND=>NDDL={a |a(0|1|3..|9)n且 n>=1}(0|1|3..|9)n且 n>=1{ab,}a nb n n>=1第6题.(1) <表达式> => <项> => <因⼦> => i(2) <表达式> => <项> => <因⼦> => (<表达式>) => (<项>)=> (<因⼦>)=>(i)(3) <表达式> => <项> => <项>*<因⼦> => <因⼦>*<因⼦> =i*i(4) <表达式> => <表达式> + <项> => <项>+<项> => <项>*<因⼦>+<项>=> <因⼦>*<因⼦>+<项> => <因⼦>*<因⼦>+<因⼦> = i*i+i (5) <表达式> => <表达式>+<项>=><项>+<项> => <因⼦>+<项>=i+<项> => i+<因⼦> => i+(<表达式>) => i+(<表达式>+<项>)=> i+(<因⼦>+<因⼦>)=> i+(i+i)(6) <表达式> => <表达式>+<项> => <项>+<项> => <因⼦>+<项> => i+<项> => i+<项>*<因⼦> => i+<因⼦>*<因⼦> = i+i*i第7题第9题语法树ss s* s s+aa a推导: S=>SS*=>SS+S*=>aa+a*11. 推导:E=>E+T=>E+T*F语法树:E+T*短语: T*F E+T*F直接短语: T*F句柄: T*F12.短语:直接短语:句柄:13.(1)最左推导:S => ABS => aBS =>aSBBS => aBBS=> abBS => abbS => abbAa => abbaa 最右推导:S => ABS => ABAa => ABaa => ASBBaa => ASBbaa => ASbbaa => Abbaa => a1b1b2a2a3 (2) ⽂法:S → ABSS → AaS →εA → aB → b(3) 短语:a1 , b1 , b2, a2 , , bb , aa , abbaa,直接短语: a1 , b1 , b2, a2 , ,句柄:a114 (1)S → ABA → aAb | εB → aBb | ε(2)S → 1S0S → AA → 0A1 |ε第四章1. 1. 构造下列正规式相应的DFA (1)1(0|1)*101NFA(2) 1(1010*|1(010)*1)*0NFA(3)NFA(4)NFA2.解:构造DFA 矩阵表⽰b其中0 表⽰初态,*表⽰终态⽤0,1,2,3,4,5分别代替{X} {Z} {X,Z} {Y} {X,Y} {X,Y,Z} 得DFA状态图为:3.解:构造DFA矩阵表⽰构造DFA的矩阵表⽰其中表⽰初态,*表⽰终态替换后的矩阵4.(1)解构造状态转换矩阵:{2,3} {0,1}{2,3}a={0,3}{2},{3},{0,1}{0,1}a={1,1} {0,1}b={2,2}(2)解:⾸先把M的状态分为两组:终态组{0},和⾮终态组{1,2,3,4,5} 此时G=( {0},{1,2,3,4,5} ) {1,2,3,4,5}a={1,3,0,5} {1,2,3,4,5}b={4,3,2,5}由于{4}a={0} {1,2,3,5}a={1,3,5}因此应将{1,2,3,4,5}划分为{4},{1,2,3,5}G=({0}{4}{1,2,3,5}){1,2,3,5}a={1,3,5}{1,2,3,5}b={4,3,2}因为{1,5}b={4} {23}b={2,3}所以应将{1,2,3,5}划分为{1,5}{2,3}G=({0}{1,5}{2,3}{4}){1,5}a={1,5} {1,5}b={4} 所以{1,5} 不⽤再划分{2,3}a={1,3} {2,3}b={3,2}因为 {2}a={1} {3}a={3} 所以{2,3}应划分为{2}{3}所以化简后为G=( {0},{2},{3},{4},{1,5})7.去除多余产⽣式后,构造NFA如下G={(0,1,3,4,6),(2,5)} {0,1,3,4,6}a={1,3}{0,1,3,4,6}b={2,3,4,5,6}所以将{0,1,3,4,6}划分为 {0,4,6}{1,3} G={(0,4,6),(1,3),(2,5)}{0,4,6}b={3,6,4} 所以划分为{0},{4,6} G={(0),(4,6),(1,3),(2,5)}不能再划分,分别⽤ 0,4,1,2代表各状态,构造DFA 状态转换图如下;b8.代⼊得S = 0(1S|1)| 1(0S|0) = 01(S|ε) | 10(S|ε) = (01|10)(S|ε)= (01|10)S | (01|10)= (01|10)*(01|10)构造NFA由NFA可得正规式为(01|10)*(01|10)=(01|10)+9.状态转换函数不是全函数,增加死状态8,G={(1,2,3,4,5,8),(6,7)}(1,2,3,4,5,8)a=(3,4,8) (3,4)应分出(1,2,3,4,5,8)b=(2,6,7,8)(1,2,3,4,5,8)c=(3,8)(1,2,3,4,5,8)d=(3,8)所以应将(1,2,3,4,5,8)分为(1,2,5,8), (3,4)G={(1,2,5,8),(3,4),(6,7)}(1,2,5,8)a=(3,4,8) 8应分出(1,2,5,8)b=(2,8)(1,2,5,8)c=(8)(1,2,5,8)d=(8)G={(1,2,5),(8),(3,4),(6,7)}(1,2,5)a=(3,4,8) 5应分出G={(1,2), (3,4),5, (6,7) ,(8) }去掉死状态8,最终结果为 (1,2) (3,4) 5,(6,7) 以1,3,5,6代替,最简DFA为b正规式:b*a(da|c)*bb*第五章1.S->a | ^ |( T )(a,(a,a))S => ( T ) => ( T , S ) => ( S , S ) => ( a , S) => ( a, ( T )) =>(a , ( T , S ) ) => (a , ( S , S )) => (a , ( a , a ) ) S=>(T) => (T,S) => (S,S) => ( ( T ) , S ) => ( ( T , S ) , S ) => ( ( T , S , S ) , S ) => ( ( S , S , S ) , S )=> ( ( ( T ) , S , S ) , S ) => ( ( ( T , S ) , S , S ) , S ) =>( ( ( S , S ) , S , S ) , S ) => ( ( ( a , S ) , S , S ) , S ) => ( ( ( a , a ) , S , S ) , S ) => ( ( ( a , a ) , ^ , S ) , S ) => ( ( ( a , a ) , ^ , ( T ) ) , S )=> ( ( ( a , a ) , ^ , ( S ) ) , S ) => ( ( ( a , a ) , ^ , ( a ) ) , S ) => ( ( ( a , a ) , ^ , ( a ) ) , a )S->a | ^ |( T )T -> T , ST -> S消除直接左递归:S->a | ^ |( T )T -> S T’T’ -> , S T’ | ξSELECT ( S->a) = {a}SELECT ( S->^) = {^}SELECT ( S->( T ) ) = { ( }SELECT ( T -> S T’) = { a , ^ , ( }SELECT ( T’ -> , S T’ ) = { , }SELECT ( T’ ->ξ) = FOLLOW ( T’ ) = FOLLOW ( T ) = { )}构造预测分析表分析符号串( a , a )#分析栈剩余输⼊串所⽤产⽣式#S ( a , a) # S -> ( T )# ) T ( ( a , a) # ( 匹配# ) T a , a ) # T -> S T’# ) T’ S a , a ) # S -> a# ) T’ a a , a ) # a 匹配# ) T’,a) # T’ -> , S T’# ) T’ S , , a ) # , 匹配# ) T’ S a ) # S->a# ) T’ a a ) # a匹配# ) T’) # T’ ->ξ# ) ) # )匹配# # 接受2.E->TE’E’->+E E’->ξT->FT’T’->T T’->ξF->PF’F’->*F’F’->ξP->(E) P->a P->b P->∧SELECT(E->TE’)=FIRST(TE’)=FIRST(T)= {(,a,b,^)SELECT(E’->+E)={+}SELECT(E’->ε)=FOLLOW(E’)= {#,)}SELECT(T->FT’)=FIRST(F)= {(,a,b,^}SELECT(T’ —>T)=FIRST(T)= {(,a,b,^)SELECT(T’->ε)=FOLLOW(T’)= {+,#,)}SELECT(F ->P F’)=FIRST(F)= {(,a,b,^}SELECT(F’->*F’)={*}SELECT(F’->ε)=FOLLOW(F’)= {(,a,b,^,+,#,)}3. S->MH S->a H->Lso H->ξK->dML K->ξL->eHf M->K M->bLM FIRST ( S ) =FIRST(MH)= FIRST ( M ) ∪FIRST ( H ) ∪{ξ}∪{a}= {a, d , b , e ,ξ} FIRST( H ) = FIRST ( L ) ∪{ξ}= { e , ξ}FIRST( K ) = { d , ξ}FIRST( M ) = FIRST ( K ) ∪{ b } = { d , b ,ξ}FOLLOW ( S ) = { # , o }FOLLOW ( H ) = FOLLOW ( S ) ∪{ f } = { f , # , o }FOLLOW ( K ) = FOLLOW ( M ) = { e , # , o }FOLLOW ( L ) ={ FIRST ( S ) –{ξ} } ∪{o} ∪FOLLOW ( K )∪{ FIRST ( M ) –{ξ} } ∪FOLLOW ( M )= {a, d , b , e , # , o }FOLLOW ( M ) ={ FIRST ( H ) –{ξ} } ∪FOLLOW ( S )∪{ FIRST ( L ) –{ξ} } = { e , # , o }SELECT ( S-> M H) = ( FIRST ( M H) –{ξ} ) ∪FOLLOW ( S )= ( FIRST( M ) ∪FIRST ( H ) –{ξ} ) ∪FOLLOW ( S )= { d , b , e , # , o }SELECT ( S-> a ) = { a }SELECT ( H->L S o ) = FIRST(L S o) = { e }SELECT ( H ->ξ) = FOLLOW ( H ) = { f , # , o }SELECT ( K->ξ) = FOLLOW ( K ) = { e , # , o }SELECT ( L-> e H f ) = { e }SELECT ( M->K ) = ( FIRST( K ) –{ξ} ) ∪FOLLOW ( M ) = {d,e , # , o }SELECT ( M -> b L M )= { b }4 . ⽂法含有左公因式,变为S->C $ { b, a }C-> b A { b }C-> a B { a }A -> b A A { b }A-> a A’ { a }A’-> ξ{ $ , a, b }A’-> C { a , b }B->a B B { a }B -> b B’ { b }B’->ξ{ $ , a , b }B’-> C { a, b }5. <程序> --- S <语句表>――A <语句>――B <⽆条件语句>――C <条件语句>――D <如果语句>――E <如果⼦句> --FS->begin A end S->begin A end { begin }A-> B A-> B A’ { a , if }A-> A ; B A’-> ; B A’ { ; }A’->ξ{ end }B-> C B-> C { a } B-> D B-> D { if }C-> a C-> a { a }D-> E D-> E D’ { if }D-> E else B D’-> else B { else }D’->ξ{; , end } E-> FC E-> FC { if }F-> if b then F-> if b then { if }⾮终结符是否为空S-否A-否A’-是B-否C-否D-否D’-是E-否F-否FIRST(S) = { begin }FIRST(A) = FIRST(B) ∪FIRST(A’) ∪{ξ} = {a , if , ; , ξ} FIRST(A’) ={ ; , ξ}FIRST(B) = FIRST(C) ∪FIRST(D) ={ a , if }FIRST(C) = {a}FIRST(D) = FIRST(E)= { if }FIRSR(D’) = {else , ξ}FIRST(E) = FIRST(F) = { if }FIRST(F) = { if }FOLLOW(S) = {# }FOLLOW(A) = {end}FOLLOW(A’) = { end }FOLLOW(B) = {; , end }FOLLOW (C) = {; , end , else }FOLLOW(D) = {; , end }FOLLOW( D’ ) = { ; , end }FOLLOW(E) = { else , ; end }FOLLOW(F) = { a }S A A’ B C D D’ E F if then else begin end a b ;6. 1.(1) S -> A | B(2) A -> aA|a(3)B -> bB |b提取(2),(3)左公因⼦(1) S -> A | B(2) A -> aA’(3) A’-> A|ξ(4) B -> bB’(5) B’-> B |ξ2.(1) S->AB(2) A->Ba|ξ(3) B->Db|D(4) D-> d|ξ提取(3)左公因⼦(1) S->AB(2) A->Ba|ξ(3) B->DB’(4) B’->b|ξ(5) D-> d|ξ3.(1) S->aAaB | bAbB(2) A-> S| db(3) B->bB|a4(1)S->i|(E)(2)E->E+S|E-S|S提取(2)左公因⼦(1)S->i|(E)(2)E->SE’(3)E’->+SE’|-SE’ |ξ5(1)S->SaA | bB(2)A->aB|c(3)B->Bb|d消除(1)(3)直接左递归(1)S->bBS’(2)S’->aAS’|ξ(3)A->aB | c(4) B -> dB’(5)B’->bB’|ξ6.(1) M->MaH | H(2) H->b(M) | (M) |b消除(1)直接左递归,提取(2)左公因⼦(1)M-> HM’(2)M’-> aHM’ |ξ(3)H->bH’ | ( M )(4)H’->(M) |ξ7. (1)1)A->baB4)B->a将1)、2)式代⼊3)式1)A->baB2)A->ξ3)B->baBbb4)B->bb5)B->a提取3)、4)式左公因⼦1)A->baB2)A->ξ3)B->bB’4)B’->aBbb | b5)B->a(3)1)S->Aa2)S->b3)A->SB4)B->ab将3)式代⼊1)式1)S->SBa2)S->b3)A->SB4)B->ab消除1)式直接左递归1)S->bS’2)S’->BaS’ |ξ3)S->b4)A->SB5)B->ab删除多余产⽣式4)1)S->bS’(5)1)S->Ab2)S->Ba3)A->aA4)A->a5)B->a提取3)4)左公因⼦1)S->Ab4)A’-> A |ξ5)B->a将3)代⼊1)5)代⼊21)S->aA’b2)S->aa3)A->aA’4)A’-> A |ξ5)B->a提取1)2)左公因⼦1)S-> aS’2)S’->A’b | a3)A->aA’4)A’-> A |ξ5)B->a删除多余产⽣式5)1)S-> aS’2)S’->A’b | a3)A->aA’4)A’-> A |ξA A’S’S将3)代⼊4)1)S-> aS’2)S’->A’b | a3)A->aA ’4)A’-> aA’ |ξ3)S’->a4)S’->b5)A->aA ’6)A’-> aA’ |ξ对2)3)提取左公因⼦1)S->aS’2)S’->aS’’3)S’’->A’b|ξ4)S’->b5)A->aA ’6)A’-> aA’ |ξ删除多余产⽣式5)1)S->aS’2)S’->aS’’3)S’’->A’b|ξ4)S’->b第六章1S → a | ∧ | ( T )T → T , S | S解:(1) 增加辅助产⽣式 S’→#S#求 FIRSTVT集FIRSTVT(S’)= {#}FIRSTVT(S)= {a ∧ ( }= { a ∧ ( } FIRSTVT (T) = {,} ∪ FIRSTVT( S ) = { , a ∧ ( }求 LASTVT集LASTVT(S’)= { # }LASTVT(S)= { a ∧ )}LASTVT (T) = { , a ∧ )}(2)因为任意两终结符之间⾄多只有⼀种优先关系成⽴,所以是算符优先⽂法(3)a ∧( ) , #F 1 1 1 1 1 1g 1 1 1 1 1 1f 2 2 1 3 2 1g 2 2 2 1 2 1f 3 3 1 3 3 1g 4 4 4 1 2 1f 3 3 1 3 3 1g 4 4 4 1 2 1(4)栈优先关系当前符号剩余输⼊串移进或规约#<·( a,a)# 移进#( <· a ,a)# 移进#(T <·, a)# 移进#(T,<· a )# 移进#(T,a ·> ) # 规约#(T,T ·> ) # 规约#(T =·) # 移进#(T) ·> #规约#T =·#接受4.扩展后的⽂法S’→#S# S→S;G S→G G→G(T) G→H H→a H→(S)T→T+S T→S(1)FIRSTVT(S)={;}∪FIRSTVT(G) = {; , a , ( }FIRSTVT(G)={ ( }∪FIRSTVT(H) = {a , ( }FIRSTCT(H)={a , ( }FIRSTVT(T) = {+} ∪FIRSTVT(S) = {+ , ; , a , ( }LASTVT(S) = {;} ∪LASTVT(G) = { ; , a , )}LASTVT(G) = { )} ∪LASTVT(H) = { a , )}LASTVT(H) = {a, )}LASTVT(T) = {+ } ∪LASTVT(S) = {+ , ; , a , ) }构造算符优先关系表因为任意两终结符之间⾄多只有⼀种优先关系成⽴,所以是算符优先⽂法(2)句型a(T+S);H;(S)的短语有:a(T+S);H;(S) a(T+S);H a(T+S) a T+S (S) H直接短语有: a T+S H (S)句柄: a素短语:a T+S (S)最左素短语:a(3)(4)不能⽤最右推导推导出上⾯的两个句⼦。

15春西交《编译原理》在线作业答案

15春西交《编译原理》在线作业答案

15春西交《编译原理》在线作业答案西交《编译原理》在线作业一、单选题(共30道试题,共60分。

)1.自上而下分析面临的四个问题中,不包括( )A.需消除左递归;B.存在回朔;C.虚假匹配;D.寻找可归约串正确答案:D2.__________不是编译程序的组成部分。

A.词法分析程序B.代码生成程序C.设备管理程序D.语法分析程序正确答案:C3.文法开始符号的所有________作为属性计算前的初始值。

A.综合属性B.继承属性C.继承属性和综合属性D.都不是正确答案:B4.编译程序使用_______区别标识符的作用域。

A.说明标识符的过程或函数名;B.说明标识符的过程或函数的静态层次;C.说明标识符的过程或函数的动态层次;D.标识符的行号;正确答案:B5.两个不同过程的活动,其保存期是________。

A.重叠的,不嵌套的;B.不重叠的,嵌套的;C.重叠的,嵌套的;D.不重叠的,不嵌套的;正确答案:B6.LR语法分析栈中存放的状态是辨认_______的DFA状态。

A.前缀;B.可归前缀;C.项目;D.句柄;正确答案:B7.为了便于优化处理,三地址代码可以表示成________。

A.三元式B.四元式C.后缀式D.间接三元式正确答案:D8.教材介绍了三种符号表的构造和处理方法,其中________中常把符号表组织成二叉树形式。

A.线性组织;B.排序组织和二分法;C.杂凑(散列)组织;D.非线性组织正确答案:B9.Chomsky把文法分成四种类型,其中,( )也称正规文法A. 0型B. 1型C. 2型D. 3型正确答案:D10.言语的词法规则一般用Chomsky的( )型文法来描绘:A. 0B. 1C. 2D. 3正确答案:D11.对应于发生式A→XY继承属性Y.y的属性计算,可能正确的语义规则是________。

A. A.a:=f(X.x,Y.y);B. Y.y:=f(A.a,Y.y);C. Y.y:=f(X.x);D. A.a:=f(Y.y);正确答案:C12.表达式-a+b*(-c+d)的逆波兰式是________。

编译原理课后习题答案

编译原理课后习题答案

编译原理课后习题答案编译原理习题答案习题11.1翻译程序:把⽤某种程序设计语⾔(源语⾔)编写的程序(源程序)翻译成与之等价的另⼀种语⾔(⽬标语⾔)的程序(⽬标程序)。

编译程序:⼀种翻译程序,将⾼级语⾔编写的源程序翻译成等价的机器语⾔或汇编语⾔的⽬标程序。

1.2词法分析、语法分析、语义分析和中间代码⽣成、代码优化、⽬标代码⽣成1.3词法分析:根据语⾔的词法规则对构成源程序的符号进⾏扫描和分解,识别出⼀个个的单词。

语法分析:根据语⾔的语法规则,把单词符号串分解成各类语法单位。

语义分析及中间代码⽣成:对语法分析识别出的语法单位分析其含义,并进⾏初步翻译。

代码优化:对中间代码进⾏加⼯变换,以产⽣更⾼效的⽬标代码。

⽬标代码⽣成:将中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或会变指令代码。

以上5个阶段依次执⾏。

习题22.1 (1)有穷⾮空的符号集合(2)利⽤产⽣是规则A->v将A替换为v时与A的上下⽂⽆关。

(3)略(4)推导是把句型中的⾮终结符⽤⼀个产⽣是规则的右部开替代的过程;直接推导是将⾮终结符的替代结果只⽤了⼀次产⽣式规则。

(5)略(6)⼀个句型的最左直接短语(7)如果⼀个⽂法存在某个句⼦对应两棵不同的语法树或有两个不同的最左(右)推导,则称这个⽂法是⼆义的。

2.2(1)VN ={Z,A,B} VT ={a,b,c,d,e}(2)abbcde,abbbcde是,acde不是。

2.3 (1)L[G]={d|n≥1,m≥0}(2)2.4 (1) A=>B=>c=>fAg=>fBg=>fCg=>feg(2)A=>AaB=>AaC=>Aae=>Bae=>BcCae=>Bceae=>Cceae=>eceae(3)A=>B=>BcC=>BcfAg=>BcfAaBg=>BcfAaCg=>BcfAaeg=>BcfBaeg =>BcfCaeg=>Bcfeaeg=>Ccfeaeg=>ecfeaeg(3)中题⽬有错应为C fCg|e2.5L[G]={a?b?c?|aab,n≥2}2.6 (1)Z→AB A→Aa|ε B→Bb|ε(2)Z→aZb|ab(3)Z→aAb A→aAb|b(4)Z→AB A→aAb|ab B→cB|ε(5)Z→aaAb|ab Z→aaBb|bb A→aaAb|ab B→aaBb|bb2.7 ⼀位数:Z→2|4|6|8两位数:Z→AB A→1|2|3|4|5|6|7|8|9 B→0|2|4|6|8三位以上:Z→ACB A→1|2|3|4|5|6|7|8|9 B→0|2|4|6|8 C→CDD→0|1|2|3|4|5|6|7|8|92.8证明:E=>E+T=>E+T*F短语:T*F E+T*F 直接短语:T*F 句柄:T*F2.9 语法树: E 短语:E*T , (E*T) , F↑(E*T) ,F ,E* F↑(E*T)E *F 直接短语:E*T , FT ↑ F 句柄:FF ( E )E * T2.10(1)语法树(2)直接短语:a , ZZ 句柄:Z( L )L , ZZ ( L )Za2.11最左推导:Z=>ZaB=>BaB=>B+AaB=>A+AaB=>(+)Z*aB=>(+)ZaB*aB =>(+)+aB*aB=>(+)+aA*aB=>(+)+a(*aB=>(+)+a(*aA=>(+)+a(*a(直接短语:(,+句柄:(2.12(1) S=>iSeS=>iiSeS=>iiIeS=>iiIeIS=>iS=>iiSeS=>iiIeS=>iiIeI(2) S=>SaS=>cSaS=>cfaS=>cfafS=>cS=>cSaS=>cfaS=>cfaf(3) E=>EOE=>EOEOE=>iOEOE=>i+EOE=>i+iOE=>i+i-E=>i+i-iE=>EOE=>iOE=>i+E=>i+EOE=>i+iOE=>i+i-E=>i+i-i2.13 Z→aABZ|cCACdA→bAB|aZA|cCCB→bAB|CzbC→cZ|c习题33.1(1)确定的有限⾃动机(2)不确定的有限⾃动机(3)正规集是⼀类特殊的单词集合,正规式是正规集的描述⼯具 3.2 (1) (1|2|3|4|5|6|7|8|9|0)*(1|3|5|7|9) (2) 11(0|1)*00 3.3 证明:b *(a|b)+={a,b,ab,ba,aa,bb …} (a|b)+={a,b,ab,ba,aa,bb …} 3.4 (1)(2)DDDD3.5(1) (2)(3)3.6(1) (01|10) *(01|10)(2) (0(1|00)*)|003.7(1) Z →1AB (2)Z →ABA →(0|1)A A →0A|εA →0|1B →(0|1)B|ε B →0B B →ε3.8 r=a(a|b )*bb3.9 Z →1BB →0Z|0 Z →0Z|ε3.10 3.11DDD习题44.1 (1)若⽂法G[Z]满⾜①⽂法不含左递归②③(2)4.2(1) First(S)={a,d} First(B)={a,d,c,ε}First(A)={a,d,e,c} First(D)={a,d,ε}Follow(S)={#,a,b,d,e} Follow(B)={a,d}Follow(A)={b} Follow(D)={e,a,d,b}(2) 不是4.3 (1) 证明: First(Z)={a,b,c} Follow(S)={#,a,b,c,d} First(A)={a,b,c,d} Follow(A)={ #,a,b,c,d }First(B)={a,d,c} Follow(B)={ a,b,c,d } 是LL(1)⽂法。

编译原理

编译原理

《编译原理》课后习题答案第 1 章引论第 1 题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。

(2)源程序:源语言编写的程序称为源程序。

(3)目标程序:目标语言书写的程序称为目标程序。

(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。

通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。

(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。

(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。

第 2 题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。

一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。

其各部分的主要功能简述如下。

词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。

语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。

语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。

中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。

中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。

目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。

表格管理程序:负责建立、填写和查找等一系列表格工作。

表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。

编译原理作业参考答案

编译原理作业参考答案

编译原理作业参考答案作业一一、是非题1.(×)2.(×)3.(×)4.(×)5.(×)6.(√)7. (√)8.(√)9.(√) 10.(×) 11.(√) 12.(√) 13.(√)二、填空题1.(词法分析),(语法分析),(中间代码生成),(代码优化),(目标代码生成)2.(单词符号),(语法单位)。

3.(源程序),(单词符号)4.(语法),(语义)5. (词法分析)、(语法分析)、(语义分析),(中间代码产生),(代码优化),(目标代码生成)6.(解释方式)7. (语法规则)8. (上下文无关文法)9. (自上而下分析法),(自下而上分析法)10. (规范推导)11. (最左归约)三、名词解释题:1.词法分析器-----执行词法分析的程序。

2. 自编译方式------先对语言的核心部分构造一个小小的编译程序,再以它为工具构造一个能够编译更多语言成分的较大编译程序。

如此扩展下去,就像滚雪球一样,越滚越大,最后形成人们所期待的整个编译程序。

3. 遍-----所谓“遍”就是对源程序或中间结果长头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。

4. 编译程序-----一种翻译程序: 能够把某一种语言程序(称为源语言程序)转换成另一种语言(成为目标程序),而后着与前者在逻辑上是等价的。

5. 超前搜索-----所谓超前搜索是在词法分析过程中,有时为了确定词性,需超前扫描若干个字符。

6. 短语------令G是一个文法,S划文法的开始符号,假定αβδ是文法G的一个句型,如果有SαAδ且Aβ,则称β是句型αβδ相对非终结符A的短语。

7. 规范句型------由规范推导所得到的句型。

8. 句柄------一个句型的最左直接短语。

9. -规范推导-----最右推导又称为规范推导。

四、简答题:1. 正规式a ( a | b )*。

2.(a*b|b*a)={a,b,ab,ba,aab,bba……}3.状态转换图是一张有限方向图。

编译原理作业题答案编译原理课后题答案

编译原理作业题答案编译原理课后题答案

第二章高级语言的语法描述6、令文法G 6为:N →D|ND D → 0|1|2|3|4|5|6|7|8|9(1)G 6 的语言L (G 6)是什么?(2)给出句子01270127、、34和568的最左推导和最右推导。

解答:思路:由N N →→ D|ND 可得出如下推导N =>=>ND ND ND=>=>=>NDD NDD NDD=>…=>=>…=>=>…=>D D n(n >=1=1))可以看出,N 最终可以推导出1个或多个(也可以是无穷)D ,而D D →→ 0|1|2|3|4|5|6|7|8|9可知,每个D 为0~9中的任一个数字,所以,中的任一个数字,所以,N N N 最终推导出的就是由最终推导出的就是由0~9这10个数字组成的字符串。

(1)G 6 的语言L (G 6)是由0~9这10个数字组成的字符串个数字组成的字符串,,或{0{0,,1,1,……,9}+。

(2)(2)句子句子01270127、、34和568的最左推导分别为的最左推导分别为: : N =>=>ND ND ND=>=>=>NDD NDD NDD=>=>=>NDDD NDDD NDDD=>=>=>DDDD DDDD DDDD=>=>=>0DDD 0DDD 0DDD=>=>=>01DD 01DD 01DD=>=>=>012D 012D 012D=>=>=>0127 0127 N =>=>ND ND ND=>=>=>DD DD DD=>=>=>3D 3D 3D=>=>=>34 34N =>=>ND ND ND=>=>=>NDD NDD NDD=>=>=>DDD DDD DDD=>=>=>5DD 5DD 5DD=>=>=>56D 56D 56D=>=>=>568 568 句子01270127、、34和568的最右推导分别为的最右推导分别为: :N =>=>ND ND ND=>=>=>N7N7N7=>=>=>ND7ND7ND7=>=>=>N27N27N27=>=>=>ND27ND27ND27=>=>=>N127N127N127=>=>=>D127D127D127=>=>=>0127 0127 N =>=>ND ND ND=>=>=>N4N4N4=>=>=>D4D4D4=>=>=>34 34N =>=>ND ND ND=>=>=>N8N8N8=>=>=>ND8ND8ND8=>=>=>N68N68N68=>=>=>D68D68D68=>=>=>568 5687、写一个文法,使其语言是奇数集,且每个基数不以0开头。

编译原理课后答案

编译原理课后答案

<表达式>AVV ------ *第二早1、 L(G[S])={ abc }2、 L(G[N])={ n 位整数或空字符串| n>0}3、 G[E] : E —>E+D | E-D | DD —>0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 94、 L(G[Z])={ a n b n | n>0 }5、(1)考虑不包括“ 0”的情况G[S]: S — >0S | ABC | 2 | 4| 6 | 8A —>1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9B —>AB | 0B | &C —>0 | 2 | 4 | 6 | 8考虑包括“ 0”的情况: G[S]: S — >AB | CB —>AB | CA —>0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 C —>0 | 2 | 4 | 6 | 8(2)方法1:G[S]: S — > ABC | 2 | 4 | 6 | 8A —>1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9B —>AB | 0B | &C —>0 | 2 | 4 | 6 | 8方法2:G[S]: S — >AB | CB —> AB | 0B |C | 0A —> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 C —>2 | 4 | 6 | 8&设<表达式 >为E , <项>为T , <因子〉为F ,注:推导过程不能省略,以下均为最 左推导(1) E => T => F => i(4) E => E+T => T+T => T*F+T => F*F+T => i*F+T => i*i+T => i*i+F => i*i+i (6) E => E+T => T+T => F+T => i+T => i+T*F => i+F*F => i+i*F => i+i*I8、 是有二义性的,因为句子abc 有两棵语法树(或称有两个最左推导或有两个最右 推导)ii<表达式>最左推导1: S => Ac => abc最左推导2:S => aB => abc9、⑴a a(2) 该文法描述了变量a和运算符+、*组成的逆波兰表达式10、(1)该文法描述了各种成对圆括号的语法结构(2)是有二义性的,因为该文法的句子()()存在两种不同的最左推导:最左推导1:S => S(S)S => (S)S => ()S => ()S(S)S => ()(S)S => ()()S => ()() 最左推导2:S => S(S)S => S(S)S(S)S => (S)S(S)S=> ()S(S)S => ()(S)S => ()()S => ()()11、⑴因为从文法的开始符E出发可推导出E+T*F,推导过程如下:E => E+T =>E+T*F,所以E+T*F 是句型。

兰州大学《编译原理》15秋在线作业1满分答案

兰州大学《编译原理》15秋在线作业1满分答案

兰州大学《编译原理》15秋在线作业1满分答案一、单选题(共 15 道试题,共 60 分。

)1. 下面说法正确的是( )A. Lex是一个词法分析器的生成器B. Yacc是一个语法分析器正确答案:A2. 编译程序是一种常用的()软件。

A. 应用B. 系统正确答案:B3. 通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码代码优化,目标代码生成等五个部分,还应包括_____。

A. 模拟执行器B. 解释器C. 表格处理和出错处理D. 符号执行器正确答案:C4. 下列不属于字符串banana的字串是()。

A. bB. baaC. babnD. baan正确答案:B5. 四种形式语言文法中,1型文法又称为 _____文法。

A. 短语结构文法B. 前后文无关文法C. 前后文有关文法D. 正规文法正确答案:C6. 间接三元式表示法的优点为()。

A. 采用间接码表,便于代码优化处理B. 节省存储空间,不便于表的修改C. 便于代码优化处理,节省存储空间D. 节省存储空间,不便于代码优化处理正确答案:A7. 在语法制导翻译中不采用拉链回填技术的语句是()。

A. 跳转语句B. 赋值语句C. 条件语句D. 循环语句正确答案:B8. 编译程序中的语法分析器接受以______为单位的输入,并产生有关信息供以后各阶段使用。

A. 表达式B. 产生式C. 单词D. 语句正确答案:C9. 一个上下文无关文法G包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组()。

A. 句子B. 句型C. 单词D. 产生式正确答案:D10. 若文法G定义的语言是无限集,则文法必然是( )A. 前后文无关文法B. 正规文法C. 二义性文法D. 递归文法正确答案:D11. 编译程序绝大多数时间花在_____ 上。

A. 出错处理B. 词法分析C. 目标代码生成D. 表格管理正确答案:D12. Chomsky定义的四种形式语言文法中,0型文法又称为()A. 短语结构文法B. 前后文无关文法C. 前后文有关文法D. 正规文法正确答案:A13. 在以下的语法分析中,_____ 特别适合于表达式的分析。

编译原理作业

编译原理作业

编译原理-作业一、判断(共计50分,每题2.5分)1、自下而上语法制导翻译法的特点是语法分析栈与语义分析栈不需要同步操作。

A.正确B.错误参考答案:B2、编译程序与解释程序的区别在于编译程序对源程序进行了翻译,而解释程序则没有。

A.正确B.错误参考答案:B3、产生式是用于定义词法成分的一种书写规则。

A.正确B.错误参考答案:B4、每一个NFA都对应有唯一的一个最小化的DFA。

A.正确B.错误参考答案:B5、包含公共左因子的文法也能直接用预测分析法来分析。

A.正确B.错误参考答案:B6、逆波兰法表示的表达式亦称前缀式。

A.正确B.错误7、设有一个LR(0)项目集I;={X→a.Bβ,A→a . },该项目集含有“移进-归约冲突”。

A.正确B.错误参考答案:A8、包含左递归的文法也能直接用LL ( 1)分析法来分析。

A.正确B.错误参考答案:B9、含有优化部分的编译程序的执行效率高。

A.正确B.错误参考答案:A10、在形式语言中,最右推导的逆过程也称为规范归约。

A.正确B.错误参考答案:A11、局部优化是在一个程序块内进行的优化。

A.正确B.错误参考答案:B12、算符优先文法允许任意两个产生式具有相同的右部。

A.正确B.错误参考答案:B13、如果i﹒>j,则j <.i。

A.正确B.错误参考答案:B14、编译方式与解释方式的根本区别在于是否生成目标代码。

A.正确B.错误参考答案:A15、动态存储分配是指在编译阶段对源程序中的量进行分配,以使目标代码在运行时加快行速度。

A.正确B.错误参考答案:B16、静态存储分配策略是在程序运行期间为源程序中的量进行分配。

A.正确B.错误参考答案:B17、四元式之间的联系是通过符号表实现的。

A.正确B.错误参考答案:B18、数组元素的地址计算与数组的存储方式有关。

A.正确B.错误参考答案:A19、设有一个LR(0)项目集I={X→a.,A→a.},该项目集含有"归约-归约冲突”。

编译原理课后作业参考答案

编译原理课后作业参考答案

第6章 属性文法和语法制导翻译7. 下列文法由开始符号S 产生一个二进制数,令综合属性val 给出该数的值:试设计求的属性文法,其中,已知B 的综合属性c, 给出由B 产生的二进位的结果值。

例如,输入时,=,其中第一个二进位的值是4,最后一个二进位的值是。

【答案】11. 设下列文法生成变量的类型说明:(1)构造一下翻译模式,把每个标识符的类型存入符号表;参考例。

【答案】第7章 语义分析和中间代码产生1. 给出下面表达式的逆波兰表示(后缀式):3. 请将表达式-(a+b)*(c+d)-(a+b+c)分别表示成三元式、间接三元式和四元式序列。

【答案】间接码表:(1)→(2)→(3)→(4)→(1)→(5)→(6)4. 按节所说的办法,写出下面赋值句A:=B*(-C+D) 的自下而上语法制导翻译过程。

给出所产生的三地址代码。

【答案】5. 按照7.3.2节所给的翻译模式,把下列赋值句翻译为三地址代码: A[i, j]:=B [i, j] + C[A [k, l]] + d [ i+j] 【答案】6. 按7.4.1和节的翻译办法,分别写出布尔式A or ( B and not (C or D) )的四元式序列。

【答案】用作数值计算时产生的四元式: 用作条件控制时产生的四元式:其中:右图中(1)和(8)为真出口,(4)(5)(7)为假出口。

7. 用7.5.1节的办法,把下面的语句翻译成四元式序列:While A<C and B<D do if A=1 then C:=C+1else while A ≦D do A:=A+2; 【答案】第9章 运行时存储空间组织4. 下面是一个Pascal 程序:当第二次( 递归地) 进入F 后,DISPLAY 的内容是什么当时整个运行栈的内容是什么 【答案】第1次进入F 后,运行栈的内容: 第2次进入F 后,运行栈的内容: 109 87 6 5 4 3 2 1 017 16 15 14 13 12 11 10 9 8 7第2次进入F 后,Display 内容为:5. 对如下的Pascal 程序,画出程序执行到(1)和(2)点时的运行栈。

(完整版)编译原理课后习题答案

(完整版)编译原理课后习题答案

(完整版)编译原理课后习题答案第一章1.典型的编译程序在逻辑功能上由哪几部分组成?答:编译程序主要由以下几个部分组成:词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成、错误处理、表格管理。

2. 实现编译程序的主要方法有哪些?答:主要有:转换法、移植法、自展法、自动生成法。

3. 将用户使用高级语言编写的程序翻译为可直接执行的机器语言程序有哪几种主要的方式?答:编译法、解释法。

4. 编译方式和解释方式的根本区别是什么?答:编译方式:是将源程序经编译得到可执行文件后,就可脱离源程序和编译程序单独执行,所以编译方式的效率高,执行速度快;解释方式:在执行时,必须源程序和解释程序同时参与才能运行,其不产生可执行程序文件,效率低,执行速度慢。

第二章1.乔姆斯基文法体系中将文法分为哪几类?文法的分类同程序设计语言的设计与实现关系如何?答:1)0型文法、1型文法、2型文法、3型文法。

2)2. 写一个文法,使其语言是偶整数的集合,每个偶整数不以0为前导。

答:Z→SME | BS→1|2|3|4|5|6|7|8|9M→ε | D | MDD→0|SB→2|4|6|8E→0|B3. 设文法G为:N→ D|NDD→ 0|1|2|3|4|5|6|7|8|9请给出句子123、301和75431的最右推导和最左推导。

答:N?ND?N3?ND3?N23?D23?123N?ND?NDD?DDD?1DD?12D?123N?ND?N1?ND1?N01?D01?301N?ND?NDD?DDD?3DD?30D?301N?ND?N1?ND1?N31?ND31?N431?ND431?N5431?D5431?7 5431N?ND?NDD?NDDD?NDDDD?DDDDD?7DDDD?75DDD?754 DD?7543D?75431 4. 证明文法S→iSeS|iS| i是二义性文法。

答:对于句型iiSeS存在两个不同的最左推导:S?iSeS?iiSesS?iS?iiSeS所以该文法是二义性文法。

免费在线作业答案西安交通大学15年7月课程考试《编译原理》作业考核试题答案

免费在线作业答案西安交通大学15年7月课程考试《编译原理》作业考核试题答案

西安交通大学15年7月课程考试《编译原理》作业考核试题答案西安交通大学15年7月课程考试《编译原理》作业考核试题试卷总分:100 测试时间:--单选题判断题其他题简答题一、单选题(共 10 道试题,共 30 分。

)V1. 算符优先分析法每次都是对( )进行归约:A. 句柄B. 最左素短语C. 素短语D. 简单短语正确答案: B 满分:3 分编译原理期末考试题2. 表达式-a+b*(-c+d)的逆波兰式是A. ab+-cd+-*;B. a-b+c-d+*;C. a-b+c-d+*;D. a-bc-d+*+;正确答案: D 满分:3 分3. 以________作为输出,允许自程序单独编译。

A. 绝对机器代码;B. 可再定位机器语言;C. 汇编语言程序;D. 中间语言;正确答案: C 满分:3 分4. 在下述的编译方法中,自顶向下的分析方法有A. 简单优先分析B. 算符优先分析C. 递归下降分析D. 预测分析技术E. LR(K)分析F. SLR(k)分析G. LL(k)分析H. LALR(K)分析正确答案: C 满分:3 分5. 以_______作为输出,允许自程序单独编译。

A. 绝对机器代码;B. 可再定位机器语言;C. 汇编语言程序;D. 中间语言;正确答案: C 满分:3 分6. 简单优先分析每次归约的是()A. 最左直接短语B. 直接短语C. 最左素短语)。

(D. 控制结点正确答案: C 满分:3 分7. 为了便于优化处理,三地址代码可以表示成A. 三元式B. 四元式C. 后缀式D. 间接三元式正确答案: D 满分:3 分8. 一个数据类型通常包括三种要素,下面不是:A. 用于区别这种类型的数据对象的属性;B. 这种类型的数据对象可以具有的值;C. 对这种类型的数据对象的内存分配;D. 可以作用于这种类型的数据对象的操作;正确答案: C 满分:3 分9. LR语法分析栈中存放的状态是识别_______的DFA状态。

15春西交《编译原理》在线作业 答案

15春西交《编译原理》在线作业 答案

15春西交《编译原理》在线作业答案西交《编译原理》在线作业一、单选题(共30道试题,共60分)1.自上而下分析面临的四个问题中,不包括需消除左递归、存在回朔、虚假匹配和寻找可归约串。

正确答案:D。

2.设备管理程序不是编译程序的组成部分。

正确答案:C。

3.文法开始符号的所有继承属性作为属性计算前的初始值。

正确答案:B。

4.编译程序使用静态层次区别标识符的作用域。

正确答案:B。

5.两个不同过程的活动,其生存期是不重叠的,嵌套的。

正确答案:B。

6.LR语法分析栈中存放的状态是识别可归前缀的DFA状态。

正确答案:B。

7.为了便于优化处理,三地址代码可以表示成间接三元式。

正确答案:D。

8.教材介绍了三种符号表的构造和处理方法,其中排序组织和二分法中常把符号表组织成二叉树形式。

正确答案:B。

9.Chomsky把文法分成四种类型,其中,3型也称正规文法。

正确答案:D。

10.语言的词法规则一般用Chomsky的3型文法来描述。

正确答案:D。

11.对应于产生式A→XY继承属性Y.y的属性计算,可能正确的语义规则是Y.y:=f(X.x)。

正确答案:C。

12.表达式-a+b*(-c+d)的逆波兰式是a-bc-d+*+。

正确答案:D。

8.在语法制导翻译中,语法树的节点可以同时具有综合属性和继承属性。

()A.正确B.错误正确答案:A9.在编译过程中,词法分析器的主要任务是将源程序分解成一个个单词符号。

()A.正确B.错误正确答案:A10.语法分析器的主要任务是检查源程序是否符合语法规则,并构建相应的语法树。

()A.正确B.错误正确答案:A11.语法制导翻译是指在语法分析的同时完成翻译过程。

()A.正确B.错误正确答案:A12.编译程序的前端包括词法分析、语法分析、语义分析和中间代码生成。

()A.正确B.错误正确答案:A13.在目标代码生成阶段,代码优化是在目标代码生成之前进行的。

()A.错误B.正确正确答案:B14.编译程序的后端包括代码生成和目标代码优化。

编译原理考试习题及答案PPT课件

编译原理考试习题及答案PPT课件

自底向上的语法分析是从输入的字符串出发,逐步将其归约为文法的起始符号。
自底向上的语法分析通常采用LR(0)、SLR(1)、LALR(2)等算法。
自底向上的语法分析可以检测出输入的字符串是否符合语言的语法规则,并生成相应的语法结构。
01
02
03
自底向上的语法分析
语法分析的算法和数据结构
语法分析的算法包括预测分析法、移位/归约法、LR(0)、SLR(1)、LALR(2)等。
三地址代码的生成
对三地址代码进行优化可以提高目标代码的执行效率,常见的优化技术包括常量折叠、死代码删除、循环展开等。
三地址代码的优化
循环优化
循环是程序中常见的结构之一,对循环进行优化可以提高程序的执行效率。常见的循环优化技术包括循环展开、循环合并、循环剪枝等。
要点一
要点二
死代码删除
死代码是指程序中永远不会被执行的代码,删除这些死代码可以减小目标代码的大小并提高程序的执行效率。
习题及答案解析
词法分析习题及答案解析
题目
给定一个字符串,判断它是否是合法的标识符。
答案解析
合法的标识符必须以字母或下划线开头,后面可以跟字母、数字或下划线。
题目
给定一个字符串,判断它是否是关键字。
答案解析
关键字是编程语言中预定义的保留字,不能用作标识符。例如,在C语言中,关键字包括`int`, `float`, `if`, `else`等。
答案解析
上下文无关文法是一种形式文法,它的产生式右部不依赖于左部的任何符号。这意味着产生式右部是一个终结符或一个非终结符的序列。
题目
给定一个抽象语法树,判断它是否是二叉树。
答案解析
抽象语法树是源代码的树形表示,每个节点表示源代码中的一个结构。如果一个抽象语法树中的每个节点最多有两个子节点,则它是二叉树。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第3章作业【编辑人:陈芳芳】
1.写一文法,使其语言是偶正整数的集合。

要求:
(1)允许0打头;
(2)不允许0打头。

【解】:
(1)允许0打头且含0的偶正整数集合的文法为:
N—>(0|D|E)N|(E|0)
D—>1|3|5|7|9
E—>2|4|6|8
(2) 不允许0打头的偶正整数集合的文法为:
R—>(D|E)N|E
N—>(0|D|E)N|(E|0)
D—>1|3|5|7|9
E—>2|4|6|8
(3) 允许0打头的偶正整数集合的文法为:
S—>0S|R
R—>(D|E)N|E
N—>(0|D|E)N|(E|0)
D—>1|3|5|7|9
E—>2|4|6|8
2.一个上下文无关文法生成句子abbaa的推导树如下:
S
A B S
a S B B A a
Ɛ b b a
(1)给出该句子的相应的最左推导,最右推导。

(2)该文法的产生式集合P可能有哪些元素?
(3)找出该句子的所有短语,简单短语,句柄。

【解】:
(1)最左推导:
S=>ABS=>aBS=>aSBBS=>aBBS=>abBS=>abbS=>abbAa=>abbaa
最右推导:
S=>ABS=>ABAa=>ABaa=>ASBBaa=>ASBbaa=>ASbbaa=>Abbaa=>abbaa (2) 产生式集合P:
S—>ABS | Aa| Ɛ
A—>a
B—>SBB | b
(3) 短语:a , Ɛ , b , bb , aa , abbaa
直接短语:a , Ɛ , b
句柄:a
3、给出生成下述语言的上下文无关文法:
(1){a n b n a m b m | n, m >= 0}
(2){1n0m1m0n | n, m >= 0}
【解】:
(1)S—>AA
A—>aAb | Ɛ
(2)S—>1S0 | A
A—>0A1 | Ɛ
第4章课后作业
1.构造一个状态数最小的DFA,它接受∑={0,1}上所有倒数第二个字符为1的字符串。

(编辑:张超)
解:
①构造正规式:(0│1)*
1(0│1)
②由正规式构造NFA:
③NFA转化为DFA :
T0=ε-closure({0})={0}
用子集构造法求DFA状态,T0为初态,T2,T3为终态。

④最小化DFA :
P0=({0,1},{2,3})
P1=({0},{1},{2},{3})
∴无等价状态。

∵没有找到多余状态,∴无多余状态。

∴上图为最小化的DFA。

2、将下图的NFA确定化为DFA,并最小化。

(编辑:张超)
a
b
解:用子集构造法求DFA状态,T0为初态,T3为终态。

最小化: ①{0,1,2} {3} ②{0,1} {2} {3} ③{0,1} {2} {3}
0和
1是等价的,∴ 得到最小化的DFA 如下

第5-7章课后作业(含答案)
1、将文法G[S] 改写为等价的G′[S],使G′[S]不含左递归和左公共因子。

G[S]:S→bSAe|bA A→Abd | dc | a
【解】:
G[S]:S→bS’S’→SAe|A
A→(dc|a)A’A’→bd A’ |ε
2、有文法G[S]:S→ABf A→BbS|e B→dAg|ε
证明文法G是LL(1)文法,并构造预测分析表
【解】:
①计算FIRST、FOLLOW、SELECT集
由上表可知:该文法中,所有相同左部不同右部的产生式SELECT集两两相交均为空集,所以该文法为LL(1)文法。

3、已知文法G[S]:S→(A)│a│b A→AcS│S 构造文法的算符优先矩阵,并判断该文法是否是算符优先文法。

【解】:
①拓展该文法:S’→#S# S→(A)│a│b A→AcS│S
②计算FIRSTVT与
③计算算符优先关系:
# =# ( = )
# < FIRSTVT(S) ( < FIRSTVT(A) c< FIRSTVT(A)
LASTVT(S) > # LASTVT(A) > ) LASTVT(A) > c
④构造算符优先矩阵
⑤因为该文法G为2型文法,且不含空产生式,没有形如 U …VW…的产生式,
其中V,W∈V
所以 G 为算符文法;又因为G 中任意两个终结符间至多有一种算N,
符优先关系存在(算符优先矩阵无冲突,见上表),所以G 为算符优先文法。

4、课后习题P122:4(2)
已知文法:S→S;G|G G→G(T)|H H→a|(S) T→T+S|S
求句型a(T+S);H;(S) 的短语、直接短语、句柄、素短语与最左素短语。

【解】:
①该句型的对应的语法树如下:
②短语: a T+S H (S) a(T+S) a(T+S);H a(T+S);H;(S)
直接短语: a T+S H (S)
句柄:a
素短语: a T+S (S)
最左素短语:a
5. 给定文法G[A]:A→(A)│a,构造出该文法的LR(1)分析表。

【解】
①对该文法拓广,得其拓广文法G[S’]:
(0) S’→A (1) A→(A) (2) A→a
②计算其LR(1)项目集规范族如下:
I
= { [S’→.A,#], [A→.(A),#], [A→.a,#] }
I
1 = GOTO(I
,A) = { [S’→A.,#] }
I
2 = GOTO(I
,() = { [A→(.A),#],[A→.(A),)],[A→.a,)] }
I
3 = GOTO(I
,a) = { [A→a.,#] }
I
4 = GOTO(I
2
,A) = { [A→(A.),#] }
I
5 = GOTO(I
2
,() = { [A→(.A),)],[A→.(A),)],[A→.a,)] }
I
6 = GOTO(I
2
,a) = { [A→a.,)] }
I
7 = GOTO(I
4
,)) = { [A→(A).,#] }
I
8 = GOTO(I
5
,A) = { [A→(A.),)] }
GOTO(I
5
,() = I
5
; GOTO(I
5
,a) = I
6
I
9 = GOTO(I
8
,)) = { [A→(A).,)] }
6、证明文法S → bB B→ B*a B → a
不是LR(0)文法,而是SLR(1)文法。

【解】
①对该文法拓广,得其拓广文法G[S’]:
(0) S’→S (1) S → bB (2) B→ B*a (3) B → a
②计算其LR(0)项目集规范族如下:
I
= closure{ S’→.S } ={ S’→.S , S→. bB }
I
1 = GOTO(I
,S) = { S’→S.}
I
2 = GOTO(I
,b) = { S→b.B,B→.B*a,B →.a }
I
3 = GOTO(I
2
,B) = { S→bB.,B→ B.*a }
I
4 = GOTO(I
2
,a) = { B → a. }
I
5 = GOTO(I
3
,*) = { B→ B*.a }
I
6 = GOTO(I
5
,a) = { B→ B*a. }
③因为该文法的LR(0)项目集规范族中有一个项目集I
3
同时存在移进项目与归约项目,即“移进-归约”冲突,所以不是LR(0)文法。

I
3
= { S→bB.,B→ B.*a }
而,FOLLOW(S)={ # }
Follow(S) ∩ { * } = φ
即可采用Follow集能解决其冲突,所以该文法是SLR(1)文法。

7. 给出下面赋值语句的逆波兰式: x := a*(b+c)-d/e 【解】x a b c + * d e / – :=
8. 把下列语句翻译成四元式(四元式的编号从100开始)。

while A∨B∧~C∨D do
if a > b then x := m - k
else y := m + k;
【解】对应的四元式序列为:
100(Jnz,A,,108 )
101(J ,,,102 )
102(Jnz,B,,104 )
103(J ,,,106 )
104(Jnz,C,,106 )
105(J ,,,108 )
106(Jnz,D,,108 )
107(J ,,,116 )
108(J>,a ,b ,110 )
109(J ,,,113 )
110(-,m,k ,T1 )
111(:= ,T1 ,,x )
112(J ,,,100)
113(+,m,k ,T2 )
114(:= ,T2 ,,y )
115(J ,,,100 )
116
11。

相关文档
最新文档