清华大学本科生考试试题《编译原理》

合集下载

编译原理课后习题答案(清华大学_张素琴)复习例题

编译原理课后习题答案(清华大学_张素琴)复习例题

编译原理复习例题(有些内容没有覆盖,比如优化、SLR(1)、LR(1)、LALR(1)等。

但要求至少要按照作业题的范围复习。

)一选择题1.编译的各阶段工作都涉及。

[A]词法分析[B]表格管理 [C]语法分析 [D]语义分析2.型文法也称为正规文法。

[A] 0 [B] 1 [C] 2 [D] 33.文法不是LL(1)的。

[A]递归 [B]右递归 [C]2型 [D]含有公共左因子的4.文法E→E+E|E*E|i的句子i*i+i*i有棵不同的语法树。

[A] 1 [B] 3 [C] 5 [D] 75.文法 S→aaS|abc 定义的语言是。

[A]{a2k bc|k>0} [B]{a k bc|k>0}[C]{a2k-1bc|k>0} [D]{a k a k bc|k>0}6.若B为非终结符,则 A→α.Bβ为。

[A]移进项目 [B]归约项目 [C]接受项目 [D]待约项目7.同心集合并可能会产生新的冲突。

[A]二义 [B]移进/移进 [C]移进/归约 [D]归约/归约8.代码优化时所依据的是。

[A]语法规则 [B]词法规则[C]等价变换规则 [D]语义规则9.表达式a-(-b)*c的逆波兰表示(@为单目减)为。

[A]a-b@c* [B]ab@c*- [C]ab@- [D]ab@c-*10.过程的DISPLAY表是用于存取过程的。

[A]非局部变量[B]嵌套层次 [C]返回地址 [D]入口地址二填空题1.词法分析阶段的任务式从左到右扫描字符流,从而逐个识别一个个的单词。

2.对于文法G[E]:E→T|E+T T→F|T*F F→P^F|P P→(E)|i,句型T+T*F+i的句柄是。

3.最右推导的逆过程称为规范归约,也称为最左归约。

4.符号表的每一项是由名字栏和两个栏目组成。

在目标代码生成阶段,符号表是的依据。

三判断题(认为正确的填“T”,错的填“F”)【】1.同心集的合并有可能产生“归约/归约”冲突。

《编译原理》样卷及答案

《编译原理》样卷及答案

一、简答题(每题4分,共24分)1、构造一个文法G,使得:L(G)={(m )m|m>0}解答:G[S]: s-> ()|(S)2、构造一个正规式,它接受 ={0,1}上符合以下规则的字符串:串内有且只有2个1的0、1字符串全体。

解答:0*10*10*3、消除文法G[S]中的直接左递归和回溯S→(L) | aS | aL→L,S | S解答:S→(L) | aS'S'→S | εL→S L'L'→,S L' | ε4、文法G[S]是乔姆斯基几型文法?S → ABS | ABAB → BAA → 0B → 1解答:1型文法/上下文有关文法5、按Thmopson算法构造与正则表达式(1*|0) * 等价的NFA。

解答:略6、设计一个状态转换图,其描述的语言规则为:如果以a开头,则其后是由a、b组成的任意符号串;如果以b开头,则其后是至少包含一个a的由a、b组成的任意符号串。

解答:略二、(本题10分)对于文法G[E]:E→ET+|TT→TF* | FF→F^ | a(1) 给出句子FF^^*的最左推导和语法树;(2) 给出句子FF^^*的短语、直接短语和句柄。

解答: (1) 2分:句子FF^^*的最左推导 2分:句子FF^^*的语法树E=>T=>TF*=>FF*=>FF^*=>FF^^*(2) 3分:句子FF^^*的短语FF^^*、FF^^*、F、F^、F^^2分:句子FF^^*的直接短语F、F^1分:句子FF^^*的句柄F三、(本题15分)构造与下列NFA等价的最小化DFA。

解答:(1)10分:构造与NFA等价的DFA(2)5分:对DFA最小化首先,将所有的状态集合分成子集: k1={0,1,2,4} k2={3,5}四、(本题15分)对下列文法G[S]:s→ eT | RTT→ DR | εR→ dR | εD→ a | bd(1) 写出文法G[S]每个非终结符的FIRST集和FOLLOW集;(2) 判断文法G[S]是否LL(1)文法(注:必须给出判断过程,否则不得分);(3) 写出文法文法G[S]的预测分析表。

编译原理第三版课后答案清华大学

编译原理第三版课后答案清华大学

编译原理第三版课后答案清华大学出版社
一、单项选择题
1.每一个解释器必须完成运行程序所需的基本功能是什么?
A.翻译代码
B.执行代码
C.优化代码
D.分析代码
答案:B.执行代码
2.下列哪个不是一种程序设计语言?
A.C
B. Lisp
C. Java
D.汇编语言
答案:D.汇编语言
3.哪一种语言可以编译成多种机器语言?
A.动态语言
B.汇编语言
C.静态语言
D.高级语言
答案:D.高级语言
4.什么类型的编译器可以将源代码转换为机器可以识别的字节码?
A.汇编器
B.解释器
C.直译器
D.编译器
答案:D.编译器
二、填空题
5.编译器用于将高级语言(________)翻译成机器语言(________)。

答案:源代码,目标代码
6.编译器通过不同的(________)实现程序翻译的过程。

编译原理 清华大学出版社 习题参考 答案

编译原理 清华大学出版社 习题参考 答案

59
60
为只包含数字加号和减号的表达式例如925317等构造一个文法
3题
• 为只包含数字、加号和减号的表达式,例 如 9-2+5,3-1,7等构造一个文法。


• G[S]:

S->S+D|S-D|D

D->0|1|2|3|4|5|6|7|8|9
1
2
3
第 11 题

• 令文法 G[E]为:
• E→T|E+T|E-T
• T→F|T*F|T/F
• F→(E)|i
• 证明 E+T*F是它的一个句型,指出这个句型的所有短语、直接短语和句柄。

• 答案:

• 此句型对应语法树如右,故为此文法一个句型。
• 或者:因为存在推导序列: E=>E+T=>E+T*F,所
• 以 E+T*F句型
• 此句型相对于 E 的短语有:E+T*F; 相对于 T 的短语
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

《编译原理》考试试题及答案

《编译原理》考试试题及答案

《编译原理》考试试题及答案(附录)一、判断题: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.扫描器的任务是从()中识别出一个个()。

编译原理(清华大学-第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)不能⽤最右推导推导出上⾯的两个句⼦。

《编译原理》考试试题及答案(汇总)

《编译原理》考试试题及答案(汇总)

《编译原理》考试试题及答案(汇总)一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)1.编译程序是对高级语言程序的解释执行。

(× )2.一个有限状态自动机中,有且仅有一个唯一的终态。

(×)3.一个算符优先文法可能不存在算符优先函数与之对应。

(√ )4.语法分析时必须先消除文法中的左递归。

(×)5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。

(√)6.逆波兰表示法表示表达式时无须使用括号. (√ )7.静态数组的存储空间可以在编译时确定。

(×)8.进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。

(×) 9.两个正规集相等的必要条件是他们对应的正规式等价。

(× )10.一个语义子程序描述了一个文法所对应的翻译工作。

(×)二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分)1.词法分析器的输出结果是_____。

A.() 单词的种别编码B.() 单词在符号表中的位置C.( )单词的种别编码和自身值D.( )单词自身值2.正规式M 1 和M 2 等价是指_____。

A.( ) M1和M2的状态数相等B.()M1和M2的有向边条数相等C.()M1和M2所识别的语言集相等D.()M1和M2状态数和有向边条数相等3.文法G:S→xSx|y所识别的语言是_____。

A.( ) xyx B.()(xyx)*C.( ) xnyxn(n≥0) D.( )x*yx*4.如果文法G是无二义的,则它的任何句子α_____。

A.()最左推导和最右推导对应的语法树必定相同B.( ) 最左推导和最右推导对应的语法树可能不同C.( )最左推导和最右推导必定相同D.( )可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握______。

编译原理(第二版)清华大学---答案详解

编译原理(第二版)清华大学---答案详解

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

清华大学编译原理期末试题

清华大学编译原理期末试题

A
2. 指出该LR(0)自动机中冲突的状态(并指出是哪种类型的冲突) ,以说明该文法不是 LR(0) 文法。 3. 说明该文法是 SLR(1) 文法。
六(07级) 给定如下文法 G(E): (1) (2) (3) (4) (5) (6) E (L‖E ) EF L L‖E LE F (F) Fd
E F (
5
1. 该 LR(0)有限状态机中存在两个冲突的状态,试指出它们,并分别说明这两个状 态是否可用SLR(1)分析方法解决? 2. 根据课程的讲解,对于不可用SLR(1)分析方法解决的冲突状态,实际上可以根据句 柄实际所期望的后跟符号来解决这一冲突。试通过分析该 LR(0)有限状态机,指 出相应句柄实际所期望的后跟符号,并说明你的结论是通过观察哪几个状态得到 的?
2. 对于PL0的栈式动态存储分配(过程活动记录中的控制信息包括静态链 SL,动态链 DL,以及返回地址 RA) ,上图左边的 PL0 程序执行到过程 p 被第二次激活时,运 行栈的当前状态如上图右边所示(栈顶指向单元26) 。试补齐该运行状态下,单元18、 19、21、22、及 23 中的内容。 3. 针对静态作用域规则和动态作用域规则, 分别指出上图左边的 PL0 程序执行到过程 q 被第二次激活时,第 L 行代码中所访问的变量 a 的值各是多少?
Offset = 30+2N d e 指向d空间的指针 d 的上界(N) c b a 控制信息 Offset = 30 Offset = 28 Offset = 27 Offset = 26 Offset = 6 Offset = 4 Offset = 3 Offset = 0
试指出函数 p 中访问 d[i] (0 i < N) 时相对于活动记录基址的 Offset 值如何计算?

编译原理考试习题及答案

编译原理考试习题及答案

( T ② S ① a
T ,
T ④ S ③ a
2019/1/29
CH.5.练习题3(P133.)

3.(1) 计算练习2文法G2的FIRSTVT和LASTVT。 S→a||(T) T→T,S|S

(1) 解: (执行相应的算法可求得) FIRSTVT(S)={ a, ∧, ( } FIRSTVT(T)={ , , a, ∧, ( } LASTVT(S)={ a, ∧, ) } LASTVT(T)={ , , a, ∧, ) }
(1) 正规式 1(0|1)*101
0
0
DFA:
3,2
1 0
3,5,2
1 1 0
x
1
1,3,2
1
0
3,4,2
1
3,Y,4,2 I0 I1 1 3 3 3 5 3
I {X} {1,3,2} {3,2} {3,4,2} {3,5,2} {3,Y,4,2}
I0 {3,2} {3,2} {3,5,2} {3,2} {3,5,2}
2019/1/29 22
CH.5.练习题2(P133.)

2.(2).给出(a,(a,a))“移进-归约”的过程。 (2) 解: (a,(a,a))的“移进-归约”过程: 步骤 符号栈 输入串 动作 9 #(T,( S ,a))# 归约 S → a 10 #(T,(T , a ))# 归约 T → S 11 #(T,(T, a ))# 移进 , 12 #(T,(T, a ))# 移进 a 13 #(T,( T,S ))# 归约 S → a 14 #(T, (T ) )# 归约 T → T,S 15 #(T, (T) )# 移进 ) 16 #( T, S )# 归约 S → (T)

《编译原理》历年试题及答案

《编译原理》历年试题及答案

<编译原理>历年试题及答案一.(每项选择2分,共20分)选择题1.将编译程序分成若干个“遍”是为了___。

a.提高程序的执行效率b.使程序的结构更加清晰c.利用有限的机器内存并提高机器的执行效率d.利用有限的机器内存但降低了机器的执行效率2.构造编译程序应掌握____。

a.源程序b.目标语言c.编译方法d.以上三项都是3.变量应当_。

a.持有左值b.持有右值c.既持有左值又持有右值d.既不持有左值也不持有右值4.编译程序绝大多数时间花在____上。

a.出错处理b.词法分析c.目标代码生成d.管理表格5.词法分析器的输出结果是____。

a.单词的种别编码b.单词在符号表中的位置c.单词的种别编码和自身值d.单词自身值6.正规式MI和M2等价是指____。

a. MI和M2的状态数相等b.Ml和M2的有向弧条数相等。

C.M1和M2所识别的语言集相等 d. Ml和M2状态数和有向弧条数相等7.中间代码生成时所依据的是—。

a.语法规则 b.词法规则 c.语义规则 d.等价变换规则8.后缀式ab+cd+/可用表达式___来表示。

a.a+b/c+d b.(a+b)/(c+d) c.a+b/(c+d) d.a+b+c/d9.程序所需的数据空间在程序运行前就可确定,称为______管理技术。

a.动态存储b.栈式存储c.静态存储d.堆式存储10.堆式动态分配申请和释放存储空间遵守________原则。

a.先请先放b.先请后放c.后请先放d.任意二(每小题10分,共80分)简答题1.画出编译程序的总体结构图,简述各部分的主要功能。

2. 已知文法G[E]:E→ET+|T T→TF* | F F→F^ | a试证:FF^^*是文法的句型,指出该句型的短语、简单短语和句柄.3.为正规式(a|b) *a(a|b)构造一个确定的有限自动机。

4.设文法G(S):S→(L)|a S|aL→L,S|S(1) 消除左递归和回溯;(2) 计算每个非终结符的FIRST和FOLLOW;(3) 构造预测分析表。

清华版编译原理课程考核04B

清华版编译原理课程考核04B

xx大学课程考核命题双向细目表学院:数计专业:计算机科学技术课程:编译原理(B卷)课程测试试题(B卷)I、命题院(部):数学与计算机科学学院II、课程名称:编译原理III、测试学期:2006-2007 学年度第1 学期IV、测试对象:数计、国交学院计科专业2004 级1、2、国交班V、问卷页数(A4):3 页VI、答卷页数(A4):4 页VII、考试方式:闭卷(开卷、闭卷或课程小论文,请填写清楚)VIII、问卷内容:(请老师在出题时安排紧凑,填空题象征性的留出一点空格,学生将所有的答案做在答题纸上的规定位置,并写清楚大题、小题的题号)一、填空题(共30分,30个空,每空1分)1、典型编译过程一般分为词法分析、语法分析、语义分析、(并非所有的编译程序都包含此阶段)、代码优化、目标代码生成六个阶段,其中词法分析的任务是对构成源程序的字符串进行扫描和分解,识别出(如标识符等)符号;为代码生成阶段收集类型信息,并进行类型审查和违背语言规范的报错处理是的任务。

2、文法是一些规则的有穷集合,它是以有穷规则集来刻划无穷集合的工具。

文法的四元组表示G =(V N,V T,P,S)中,元素V N,V T 分别是非空有限的。

且二者交集为φ;P为产生式/规则集,是文法的核心部分;S ∈V N,是文法的开始符号(或识别符) ,它是一个非终结符,至少要在一条规则中作为出现。

3、构造LR(0)项目集规范族的项目类型分为四种:形如A→α.aβ的、形如的待约项目、形如A→αBβ.的归约项目、形如S'→α.的。

4、一个优先关系矩阵对应的优先函数;所表示优先关系唯一的矩阵不一定存在优先函数;当两个终结符对之间无优先关系时,可以将相应元素置出错信息,而使用却无法识别这种情况,不能准确指出出错位置。

5、在编译程序中用符号表来存放语言中出现的有关的语义特征属性信息。

程序设计语言中通用的标识符属性主要有如下几种:符号名、符号的、符号的存储类别、符号的、符号变量的存储分配信息及数组的内情向量等其它属性。

清华版编译原理课程考核00B

清华版编译原理课程考核00B

课程测试试题(B卷)――――――――――――――以下为教师填写――――――――――――――――――Ⅰ、院(系)名称:数学与计算机科学系Ⅱ、课程名称:编译原理――――――――――――――――以下为试卷说明――――――――――――――――1、考试时间:120分钟2、试题总页数:共3页3、主题词:一、是非题(正确的打√,错误的打×,2分×10=20分)1、从功能上看,一个编译程序就是一个语言翻译程序。

()2、LEX是一个语法分析程序的生成系统。

()3、一个句型的最左直接短语称为句柄。

()4、已证明文法的二义性是可判定的。

()5、一个NFA一定是DFA,反之,不成立。

()6、递归子程序法是一种不确定的自顶向下分析法。

()7、算符优先分析法只考虑终结符之间的优先关系。

()8、代码优化按阶段可分为中间代码优化和目标代码优化。

()9、由优先关系矩阵一定能构造出优先函数。

()10、删除公共子表达式、变换语句次序都是基本块的一种保结构变换。

()二、名词解释(4分×5=20分)1、规则2、句子3、代码生成4、核5、语法制导翻译三、简答题(5分×6=30分)1、不确定有穷自动机NDFA用一个五元组M=(K,∑,f,S,Z)表示,试述各元素的含义。

2、一个符号有哪些主要属性?各属性作用如何?3、运行目标程序时存储区划分为哪几个区?各区用于存放什么内容?4、构造LR(0)项目集规范族的项目类型分为哪几种?并举例说明。

5、将表达式a:=b*c+b*d-e/f用三元式、四元式和波兰式表示出来。

6、一个文法G是LL(1)文法的充要条件是什么?四、计算题(30分)1、已知文法G(S):(8分)(1)S→aAS(2)A→SbA(3)A→SS(4)S→a(5)S→ba(1)给出句子aabbaa的规范推导并画出语法树;(2)给出句子aabbaa的短语、直接短语和句柄。

2、有文法G1(S):(13分)(0)S‘→S(1)S→L=R(2)S→R(3)L→*R(4)L→i(5)R→L判断它是否为LR(0)文法、SLR(1)文法、LALR(1)文法、LR(1)文法,并说明原因。

编译原理(第二版)清华大学---答案详解

编译原理(第二版)清华大学---答案详解

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

编译原理考试试题与答案(汇总)

编译原理考试试题与答案(汇总)

《编译原理》考试试题及答案(汇总)一、是非题(请在括号,正确的划√,错误的划×)(每个2分,共20分)1.编译程序是对高级语言程序的解释执行。

(× )2.一个有限状态自动机中,有且仅有一个唯一的终态。

(×)3.一个算符优先文法可能不存在算符优先函数与之对应。

(√ )4.语法分析时必须先消除文法中的左递归。

(×)5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。

(√)6.逆波兰表示法表示表达式时无须使用括号。

(√ )7.静态数组的存储空间可以在编译时确定。

(×)8.进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。

(×) 9.两个正规集相等的必要条件是他们对应的正规式等价。

(× )10.一个语义子程序描述了一个文法所对应的翻译工作。

(×)二、选择题(请在前括号选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分) 1.词法分析器的输出结果是_____。

A.( ) 单词的种别编码B.( ) 单词在符号表中的位置C.( ) 单词的种别编码和自身值D.( ) 单词自身值2.正规式 M 1 和 M 2 等价是指_____。

A.( ) M1和M2的状态数相等 B.( ) M1和M2的有向边条数相等C.( ) M1和M2所识别的语言集相等D.( ) M1和M2状态数和有向边条数相等3.文法G:S→xSx|y所识别的语言是_____。

A.( ) xyx B.( ) (xyx)* C.( ) xnyxn(n≥0) D.( ) x*yx*4.如果文法G是无二义的,则它的任何句子α_____。

A.( )最左推导和最右推导对应的语法树必定相同B.( ) 最左推导和最右推导对应的语法树可能不同C.( ) 最左推导和最右推导必定相同D.( )可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握______。

2023大学_编译原理试题及参考答案

2023大学_编译原理试题及参考答案

2023编译原理试题及参考答案编译原理试题一、是非题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分)1.词法分析器的输出结果是_____。

A.( ) 单词的种别编码B.( ) 单词在符号表中的位置C.( ) 单词的种别编码和自身值D.( ) 单词自身值2. 正规式 M 1 和 M 2 等价是指_____。

A.( ) M1和M2的状态数相等B.( ) M1和M2的有向边条数相等C.( ) M1和M2所识别的语言集相等D.( ) M1和M2状态数和有向边条数相等3. 文法G:SxSx|y所识别的语言是_____。

A.( ) xyxB.( ) (xyx)__C.( ) xnyxn(n0)D.( ) x__yx__4.如果文法G是无二义的,则它的任何句子_____。

A.( )最左推导和最右推导对应的语法树必定相同B.( ) 最左推导和最右推导对应的语法树可能不同C.( ) 最左推导和最右推导必定相同D.( )可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握______。

A.( )源程序B.( ) 目标语言C.( ) 编译方法D.( ) 以上三项都是6.四元式之间的联系是通过_____实现的。

A.( ) 指示器B.( ) 临时变量C.( ) 符号表D.( ) 程序变量7.表达式(┐AB)(CD)的逆波兰表示为_____。

A. ( ) ┐ABCDB.( ) A┐BCDC.( ) AB┐CDD.( ) A┐BCD8. 优化可生成_____的目标代码。

A.( ) 运行时间较短B.( ) 占用存储空间较小C.( ) 运行时间短但占用内存空间大D.( ) 运行时间短且占用存储空间小9.下列______优化方法不是针对循环优化进行的。

A. ( ) 强度削弱B.( ) 删除归纳变量C.( ) 删除多余运算D.( ) 代码外提10.编译程序使用_____区别标识符的作用域。

清华版编译原理试卷及答案1

清华版编译原理试卷及答案1

复习题一一、填空题1、编译过程的各阶段都需要进行()管理和()处理,所以在典型编译程序框图中,各阶段对应的程序都和上述管理或处理操作程序相联系。

2、对给定文法G[E],由推导序列E=>E+T=>T+T=>i+T=>i+i 可知:该推导为()推导,从该推导序列可得到()个句型,其中的()同时也是句子。

3、语法分析方法分为自上而下与自下而上两类,自上而下的分析方法方要有递归子程序分析法和();而自下而上的分析方法主要有()和()。

4、用四元组G =(VN,VT,P,S)表示文法,则其元素VN表示()集;元素VT表示()集;元素P表示规则集;元素S表示开始符号,它必须是一个()符号。

5、YACC是一种()分析程序的自动构造工具;而LEX是一种()分析程序的自动构造工具。

6、用优先函数表示优先关系的优点是(),缺点是()。

根据优先关系矩阵计算优先函数可用Floyed迭代法和()法。

7、对一个文法G,在其LR(0)项目集规范族DFA中,当有归约项目和()项目或()项目共存于同一个状态中时,该文法就不是LR(0) 文法。

8、对于A∈VN 定义A的后续符号集:FOLLOW(A)={a|S=*>uAβ, a∈VT,且a∈(),u∈VT*,β∈V+;若(),则#∈FOLLOW(A)。

也可以定义为:FOLLOW(A)={a|S=*>…Aa…,a ∈VT}。

若有(),则规定#∈FOLLOW(A)。

9、基本块的定义:一个基本块是指程序中一个执行的语句序列,其中只有一个入口和一个出口。

入口是程序第一个语句或转移语句的目标语句,或转移语句的后继第一个语句。

出口是程序()或转移语句。

在基本块范围内的优化称为()。

10、预测分析器由预测分析表、先进后出栈(用来存放分析过程的语法符号)和()三部分组成。

其中预测分析表是一个二维矩阵,其形式为M[A,a],其中A∈V N,a∈V T或#。

若有产生式A→α,使得a∈(),则将A→α填入M[A,a]中。

清华版编译原理课程考核04A

清华版编译原理课程考核04A

xx大学课程考核命题双向细目表学院:数计专业:计算机科学技术课程:编译原理(A卷)课程测试试题(A卷)I、命题院(部):数学与计算机科学学院II、课程名称:编译原理III、测试学期:2006-2007 学年度第1 学期IV、测试对象:数计、国交学院计科专业2004 级1、2、国交班V、问卷页数(A4):3 页VI、答卷页数(A4):4 页VII、考试方式:闭卷(开卷、闭卷或课程小论文,请填写清楚)VIII、问卷内容:(请老师在出题时安排紧凑,填空题象征性的留出一点空格,学生将所有的答案做在答题纸上的规定位置,并写清楚大题、小题的题号)一、填空题(共30分,30个空,每空1分)1、典型高级程序设计语言编译系统的工作过程一般分为六个阶段,即词法分析、语法分析、语义分析、中间代码生成、、目标代码生成。

编译阶段的两种组合方式是组合法和按遍组合法,这两种组合方式的主要参考因素都是的特征。

2、Chomsky将文法按其所表示语言的表达能力,由高往低分为四类:0型,1型,2型,3型文法。

其中,2型文法也称,它的所有规则α→β 都满足:α∈,β∈((V N∪V T) *且,仅当β= ε时例外。

3、现代编译系统多采用方法,即在语法分析过程中根据各个规则所相联的或所对应的语义子程序进行翻译的办法。

该方法使用为工具来说明程序设计语言的语义。

4、构造与NFA M等价的正规文法G的方法如下:(1)对转换函数f(A,a)=B或f(A,ε)=B,改成形如或的产生式;(2)对可识别终态Z,增加一个产生式:。

5、代码生成要考虑的主要问题:充分利用的问题、选择的问题、选择的问题。

6、设有穷自动机M=(K,∑,f,S,Z),若当M为时,满足z0∈f(S,α)且z0∈Z,或当M为时,满足f(S,α)=P∈Z,则称符号串α∈∑*可被M所。

7、符号表中每一项对应一个多元组。

符号表项的组织可分为组织、组织、组织等。

8、对于A∈∀VN 定义A的后续符号集:FOLLOW(A)={a|S=*>uAβ,a∈VT,且a∈,u∈VT*,β∈V+;若,则#∈FOLLOW(A)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

}
S’ id := E’ { p := lookup ; if ( p nil )
else error }
then S’ . code := E’.code || gen (p ‘:=’ E’ . place)
E E1 or E2 { E1 .true := E . true ; E1 . false := newlabel ; E2 . true := E . true ; E2 . false := E . false ; E .code := E1 .code || gen(E1 . false ‘:’) || E2 .code }
四 (12%) 给定文法G(S): S Ab ABc A aA a Bb
回答下列问题,并给出理由: 1. 该文法是否 LR(0) 文法?
2. 该文法是否 SLR(1) 文法?
3. 该文法是否 LALR(1) 文法?
4. 该文法是否二义文法?
五 (8%) 给定文法G(S):
(1)S (2)S (3)S (4)S (5)A
OUT [B] = GEN [B] ∪(IN [B] KILL [B])
IN [B] = ∪p P[B] OUT [p]
其中,P[B] 为 B 的所有前驱基本块;GEN [B] 为在 B 中定值并可到达 B 出口的 所有定值点集合;KILL [B] 为 B 之外的那些定值点集合, 其定值的变量在 B 中又 重新定值;IN [B] 为可到达 B 入口处的各变量所有定值点的集合;OUT [B]为 B 出 口处的各变量所有定值点的集合。
的2 的的的的
试指出函数 p 中访问 d[i](0 i < N)时相对于活动记录基址的 Offset 值如 何计算?若将数组 c 和 d 的声明次序颠倒,则d[i](0 i < N)又如何计算? (对于后一问题默认采用同样的运行时组织方式,若你认为可能有歧义,请予以说 明)
4. (3 %) 简述实现参数传递方式 call-by-value 和 call-by-reference 的异同(指 出实参的存储与访问策略)。
注:可以直接使用类似于讲稿中的 MatchToken 函数。为简洁,可以直接用文法终 结符作为参数,例如 MatchToken(ip),假设其含义如下:(1)若当前扫描的单 词与终结符 ip 匹配,设置 ip . val,读下一个单词;(2)否则,显示词法错 误,退出处理。(若自己假设了不同的 MatchToken 函数或其他自定义函数, 请予以说明)
2. 试指出该串相对于上述文法的句柄。
七 (10%) 以下是语法制导生成某类TAC语句的一个L-属性文法(对应讲稿中的相应内容):
S if E then S1 { E .true := newlabel ; E .false := S .next ; := S .next ; S .code := E .code || gen ‘:’) || S1 .code }
对于图3 所给出的流图,分别求出 B1,B2,B3, B4 入口处及出口处的到达-定值点 集合,即分别计算 In(B1),Out(B1),In(B2),Out(B2),In(B3),Out(B3),In(B4), Out(B4)。初始时,假设 In(B1)为空。
2. (2%) 指出图3 所示流图中存在的自然循环。
(4) b:=c+2 (5) e:=b (6) if e > d goto (1)
B3
(7) e:=c-a (8) a:=c (9) if a < 100 goto (2)
B4
(10) e:=c-a (11) a:=c+e
(12) return
图 3 流图
以基本块为单位的到达-定值(reaching definitions)数据流方程可表示为
其中,属性 S .code , E .code , S .next , , ,E’ .place, 语义函数 newlabel , gen( ),lookup , error 以及所涉及到的TAC语句与讲稿中一致,“||”表示TAC 语句序列的拼接。
(此外,假设在语法制导处理过程中遇到的二义性问题可以按照某种原则处理比如 规定优先级,else 匹配之前最近的 if,运算的结合性,等等,这里不必考虑基 础文法的二义性。)
注:该段程序包含下列作用域
{a, x, y, p, r}
{z}
{x, s, t}
{v}
const a=25; var x,y; procedure p;
var z; begin
…… end; procedure r; var x, s; procedure t;
var v; begin
…… end; begin …… end; begin …… end.
2. (5 pts) 试通过消去文法G[S]中的左递归得到一个LL(1)文法G’[S],并给出一个以 G’[S]为基础文法的翻译模式,其语义处理过程等效于上述以 G[S]为基础文法的翻译模 式。
3. (7 pts) 针对上述以 G’[S] 作为基础文法设计的翻译模式,构造一个自上而下的 递归下降(预测)翻译程序:
六 (9%) 已知某扩展文法G[S’]的LALR(1)分析表如下:
状态
a
0
s11
1
2
3
s11
4
s5
5
s6
6
7
8
9
10
s11
11
s11
12
13
s11
14
ACTION
t
g
c
s8
s4
s2
s3
s8
s4
s7
r1
r1
s9
s10
s8
s4
s8
s4
s13
s2
s8
s4
r4
s2
GOTO
#
S
1
acc
16
r1
14 12 15 r4
...... /*这里略去关于布尔表达式更多的部分*/
E’ E’1 + E’2 { E’ .place := newtemp;
E’ .code := E’1 .code || E’2 .code || gen( E’ .place ’:=’ E’1 . place + E’2 . place)
}
...... /*这里略去关于算术表达式更多的部分*/
3. (2%) 对于图3 所示流图,指出语句(3)中变量 c 和 b 在基本块 B2 范围内的待 用(Next Use)信息。
三 (18%) 如下是一个简单的FTP客户端程序对应的翻译模式(省略函数的细节),其基础文法 为 G[S]:
S
A bye { EXIT ( ); }
A
AC {}
{}
C
open ip num {OPEN (ip . val, num . val ); }
begin
r:=; show end;
begin
r:=;
show;
small;
writeln;
show;
small;
writeln;
end.
注:write(r:5:3) 表示按照一定格式(总宽度为5,小数点后有三位数字)输出 r; writeln 表示输出一个换行符。
3.(3 %)
若按照某种运行时组织方式, 如下函数 p 被激活时的过程 活动记录如图 2 所示。其中 d 是动态数组。
gen(‘goto’ S1 .next) }
S S1; S2 { S1 .next := newlabel ; S2 .next := S .next ; S .code := S1 .code || gen(S1 .next ‘:’) || S2 .code }
S S’ { S’.next := S .next ; S .code := S’ .code
gen(E .false ‘:’) || S2 .code
}
S while E do S1 { E .true := newlabel ; E .false := S .next ; S1 .next := newlabel ; S .code := gen(S1 .next ‘:’)|| E .code|| gen ‘:’) || S1 .code ||
八 (16%) 设有如下翻译模式,其基础文法是 G[S]:
S { E . Max := 32767 } E { print (E. Val) } E { E1 . Max := E . Max } E1 + { F . Max := E . Max } F
5.(3 %) 已知语言 L 已在机器 A 上实现,即已有一个在机器 A 上运行的 L 语言的 本地编译程序 X。试给出一种实现方案,可以将机器 A 上的语言 L 移植到另一机 器 B,即获得一个运行于机器 B 上的L 语言的本地编译程序。
二 (12%) 1.(8 %)
(1) a:=1
B1
(2) b:=2 B2 (3) c:=a+b
/*here*/
图 1 作用域与可见性
2.(3 %) 如下是一个类 Pascal 程序片断。试分别给出遵循静态作用域规则和动态作 用域规则时运行该段程序时的输出结果。
var r: real
procedure show;
begin
write(r:5:3)
end;
procedure small;
var r:real;
cd id
{CWD (id . val); }
ls
{LIST ( ); }
put id
{PUT_FILE (id . val); }
get id
相关文档
最新文档