《编译原理》课程研讨题(2016)
- 格式:docx
- 大小:42.91 KB
- 文档页数:9
《编译原理》考试试卷A适用专业:考试日期:闭卷所需时间:120分钟总分:100分一、填空题:(每空1分,共10分)1.解释系统与编译系统的区别在于和。
2.在编译过程中始终伴随着管理和出错处理过程。
3.语法分析的方法为和两大类。
4.LL(1)文法中不能有和。
5.词法分析器中单词的描述工具是 ,单词的识别工具。
6.算符优先语法分析,在符号栈栈顶出现时,进行规约处理。
二、单选题(每小题2分,共10分)1.词法分析器的加工对象是()A.中间代码B.单词C.源程序D.元程序2.同正则表达式a*b*等价的文法是()A. G1:S→aS|bS|εB. G2: S→aSb|εC. G3:S→aS|Sb|εD. G4: S→abS|ε3.文法G[A]:A→bH H→BA B→Ab H→a 不是()A. 2型文法B. 3型文法C. 0型文法D.1型文法4.算符优先分析每次都是对()进行规约。
A.短语B.最左素短语C.素短语D.句柄5.( )不是DFA的成分。
A.有穷字母表B. 初始状态集合C.终止状态集合D.有限状态集合三、问答题(第1,5小题每题15分,其余每小题10分,共80分)1. (15分)解释下列术语:(1)编译程序(2)句柄(3)上下文无关文法2.编译程序主要有哪些构成成分?(10分)3.给出描述语言L={a n b2n c m|n,m≥0}的cfg。
(10分)4.(10分)将下图中的DFA M最小化。
5. (15分)判断文法G[S]:S→aHH→aMd|dM→Ab|εA→aM|e是否为LL(1)文法?给出判断过程。
6. (10分)改写文法G[E]:E → E+T|TT →T*F|FF →(E)| a为无左递归文法。
7. (10分)已知文法G[S]为:S→VV→T|ViTT→F|T+FF→)V*|(请指出句型(+(i( 规范推到,并指出句型F+Fi( 中的短语、句柄和素短语。
《编译原理》考试试卷A参考答案适用专业:考试日期:闭卷所需时间:120分钟总分:100分一、填空题:(每空1分,共10分)1. 边翻译边执行和不生成目标代码。
中山大学本科生期末考试考试科目:《编译原理》(A卷答案)学年学期:2016学年第一学期姓名:学院/系:数据科学与计算机学院/软件工程学号:考试方式:闭卷年级专业:考试时长:120分钟班别:第八条:“考试作弊者,不授予学士学位。
”------------以下为试题区域,共九道大题,总分100分,考生请在答题纸上作答------------1.Write regular expressions for the following languages (8 points).a)All strings over {0, 1} that do not contain consecutive zeros (4 points).(0?1)*0?b)All strings representing a nonnegative binary number (without leading zeros)which is a multiple of 8 (4 points).0 | 1(1|0)*0002.Consider the following regular expression (17 points):( a | b ) * a ( a | b )a)Based on the Thompson Algorithm, construct the NFA from the above regularexpression (8 points).b)Convert the NFA into a DFA with minimum number of states (9 points).ε-closure({0}) = {0, 1, 2, 4, 7}ε-closure(move({0, 1, 2, 4, 7}, ‘a’)) = ε-closure({3, 8}) = {1, 2, 3, 4, 6, 7, 8, 9, 11}ε-closure(move({0, 1, 2, 4, 7}, ‘b’)) = ε-closure({5}) = {1, 2, 4, 5, 6, 7}ε-closure(move({1, 2, 3, 4, 6, 7, 8, 9, 11}, ‘a’)) = ε-closure({3, 8, 10}) = {1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13}ε-closure(move({1, 2, 3, 4, 6, 7, 8, 9, 11}, ‘b’)) = ε-closure({5, 12}) = {1, 2, 4, 5, 6, 7, 12, 13}ε-closure(move({1, 2, 4, 5, 6, 7}, ‘a’)) = ε-closure({3, 8}) = {1, 2, 3, 4, 6, 7, 8, 9, 11}ε-closure(move({1, 2, 4, 5, 6, 7}, ‘b’)) = ε-closure({5}) = {1, 2, 4, 5, 6, 7}ε-closure(move({1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13}, ‘a’)) = ε-closure({3, 8, 10}) = {1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13}ε-closure(move({1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13}, ‘b’)) = ε-closure({5, 12}) = {1, 2, 4, 5, 6, 7, 12, 13}ε-closure(move({1, 2, 4, 5, 6, 7, 12, 13}, ‘a’)) = ε-closure({3, 8}) = {1, 2, 3, 4, 6, 7, 8, 9, 11}ε-closure(move({1, 2, 4, 5, 6, 7, 12, 13}, ‘b’)) = ε-closure({5}) = {1, 2, 4, 5, 6, 7}Minimized DFA:3.Consider the following CFG (9 points):S → +SS | -SS | aand the string +a-aa.a)Give a leftmost derivation for the string (3 points).S => +SS => +aS => +a-SS => +a-aS => +a-aab)Give a rightmost derivation for the string (3 points).S => +SS => +S-SS => +S-Sa => +S-aa => +a-aac)Give a parse tree for the string (3 points).4.Write CFGs for the following languages (8 points):a)L={a n b m c n | m ≥ 0, n ≥ 1} (4 points).S → aSc | aAcA → bA | εb)All strings over {a, b} that begin and end with the same letter (4 points).S → aAa | bAb | a | bA → aA | bA | ε5.Consider the following CFGs (18 points):S → i(E)t(E)X | EX → e(E) | εE → aY | bYY→ c(E) | εwhere i, t, e, a, b, c, ( and ) are terminals.a)Compute the FIRST and FOLLOW sets for all non-terminals (8 points).b)Construct an LL(1) parsing table for the grammar (8 points).c)Is this grammar LL(1)? Why? (2 points)Y es, because no conflicts can be found in the LL(1) parsing table.6.Consider the following CFG (12 points):S→aAD | aBe | bBS | bAeA→gB→gD→d |εaugment the grammar and construct the LR(1) sets of items for the augmented grammar.首先拓广G[S]为G[Z]:0:Z → S 1:S → aAD 2:S → aBe3:S → bBS 4:S → bAe 5:A → g6:B → g 7:D → d 8:D →ε构造G[Z]的LR(1)项目族为:7.The following grammar generates binary strings and their complements (10 points).F →B| BB →B0| B1| 0| 1The value of a (non-negated) string is just the decimal value of the binary number the string represents; the value of a negated string is the decimal value of the string with 1’s replaced by 0’s and 0’s replaced by 1’s. For example, the value of 010 is 2 and ¬010 is 5. Design a syntax-directed definition (SDD) for the above grammar such that the non-terminal F has an attribute F.val which keeps the value of an inputstring generated by F. Please do NOT modify the grammar.8.Consider the following basic block (10 points):a)Construct the DAG of the above basic block (5 points).b)Assume that only G, L and M will be used after the basic block. Give theoptimized three-address statement sequence (5 points).9.Consider the following fragment of three-address instructions (8 points):(1) b := 1(2) b := 2(3) if w <= x goto B(4) e := b(5) goto B(6) A: goto D(7) B: c := 3(8) b := 4(9) c := 6(10) D: if y <= z goto E(11) goto End(12) E: g := g + 1(13) h: = 8(14) goto A(15) End: h := 9Please partition these three-address instructions into basic blocks, and draw the control flow graph. Y ou may draw the resulting graph directly, but you must markeach node by number n~m indicating that the corresponding basic block consists of instructions n through m, inclusive.。
《编译原理》习题参考答案(六)第五章5.4 为下列类型写类型表达式:(a) 指向实数的指针数组,数组的下标从1到100。
(b) 两位数组(即数组的数组),他的行下标从1到10,列下标从1到20。
(c) 函数,他的定义域是从整数到整数的指针的函数,它的值域是从一个整数和一个字符组成的纪录。
Solution:(a) array ( 1 . . 100 , pointer ( real ) )(b) array ( 1 . . 10 , array ( 1 . . 20 , type ) )(c) ( integer →pointer(integer) )→record((i : integer) * ( c : char )) 假定作为值域的记录类型的两个域分别叫i和c。
5.6 下列文法定以字面常量表的表。
符号的解释和图5.2文法的那些相同,增加了类型list,它表示类型T的元素表。
→ D ; EP→ D ; D | id : TD→ list of T | char | integerTE→ ( L ) | literal | num | id→ E , L | EL写一个类似5.3节中的翻译方案,以确定表达式( E )和表( L )的类型。
P→ D ; ED→ D ; DD→ id : T { addtype ( id.entry , T.type ) }T→ char { T.type := char }T→ integer { T.type := integer }T→ list of T1 { T.type := list ( T1.type ) }E→ literal { E.type := char }E→ num { E.type := integer }E→ id { E.type := lookup ( id.entry ) }E→ ( L ) { E.type := list ( L.type ) }L→E{L.type:=E.type}L→ E , L1 { L.type := if L1.type = E.type then E.typeelse type_error }5.16 对下面的每对表达式,找出最一般的合一代换:(a) α1 → ( α2 →α1 )(b) array ( β1 ) → ( pointer( β1 ) →β2 )(c) γ1 →γ2(d) δ1 →(δ1 →δ2 )Solution:S(α1) = array ( β1 ) S(α2) = pointer ( β1 ) S(β2) = array ( β1 ) (a)(c):S(γ1) = α1 S(γ2) = α2 → α1 (a)(d):S(α1) = S(α2) = S(δ1) = S(δ2) = α (b)(c):S(γ1) = array ( β1 ) S(γ2) = pointer ( β1 ) → β2 (b)(d): 无 (c)(d):S(γ1) = δ1 S(γ2) = δ1 → δ25.17 仿效例5.5,推到下面map 的多态类型: map: ∀ α . ∀ β . ( ( α → β ) * list ( α ) ) → list ( β ) map 的ML 定义是 fun map ( f , l ) = if null ( l ) then nilelse cons ( f ( hd ( l ) ) , map ( f , tl ( l ) ) );在这个函数体中,内部定义的标识符的类型是: null : ∀α . list (α ) → boolean ; nil : ∀α . list (α ) ;cons : ∀α . ( α * list (α ) ) → list (α ) ;hd:∀α . list (α ) →α;∀α . list (α ) → list (α ) ;tl:Solution:行定型断言代换规则(1) f : α( Exp Id )(2) l : β( Exp Id )(3) map : γ( Exp Id )(4) map ( f , l ) : δγ = ( α * β ) →δ(Exp Funcall)(5) null : list (α0) → boolean ( Exp Id ) 和( Type Fresh )(6) null ( l ) : boolean β = list (α0) (Exp Funcall)(7) nil : list (α1) ( Exp Id ) 和( Type Fresh )(8) l : list (α0) 由(2)可得(9) hd : list (α2) →α2( Exp Id ) 和( Type Fresh )(10) hd ( l ) : α0α2 = α0(Exp Funcall)(11) f ( hd ( l ) ) : α3α = α0→α3( Exp Id )(12) f : α0→α3由(1)可得(13) tl : list (α4)→ list (α4) ( Exp Id ) 和( Type Fresh )(14) tl ( l ) : list (α0) α4 = α0(Exp Funcall)(15) map : ((α0→α3)*list(α0))→δ由(3)可得(16) map ( f , tl ( l ) ) : δ(Exp Funcall)(17) cons : α5 * list(α5) → list(α5) ( Exp Id ) 和( Type Fresh ) (18) cons (…) : list (α3) α5 = α3 , δ=list(α3) (Exp Funcall)(19) if : boolean *α6 * α6→α6( Exp Id ) 和( Type Fresh )(20) if (…) : list (α1) α6 = α1 , α3 = α1(Exp Funcall)(21) match : α7 *α7 →α7( Exp Id ) 和( Type Fresh ) (22) match (…) : list (α1) α7 = list (α1) (Exp Funcall)至此有map : ( (α0→α1)*list(α0) )→list(α1)所以map : ∀α . ∀β . ( ( α→β ) * list ( α ) ) → list ( β )5.18 假定类型名link和cell如5.5节那样定义,下面的表达式中,那些结构等价?那些名字等价?(a) link(b) pointer ( cell )(c) pointer ( link )(d) pointer ( record ( ( info : integer ) * ( next : pointer ( cell ) ) ) ) Solution:(a)、(b)、(d)结构等价,无名字等价。
编译原理第三版答案编译原理是计算机科学中非常重要的一门课程,它涉及到程序设计语言的语法、语义和编译器的设计与实现等内容。
《编译原理》(Compilers: Principles, Techniques, and Tools)是编译原理领域的经典教材,由Alfred V. Aho、Monica S. Lam、Ravi Sethi和Jeffrey D. Ullman合著,已经出版了三个版本。
本文将针对《编译原理》第三版中的习题和答案进行整理和总结,以帮助学习者更好地理解和掌握编译原理相关知识。
第一章,引论。
1.1 什么是编译器?编译器是一种将源程序翻译成目标程序的程序,它包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等阶段。
1.2 编译器的主要任务是什么?编译器的主要任务是将高级语言程序翻译成等价的目标程序,同时保持程序的功能和性能。
1.3 编译器的结构包括哪些部分?编译器的结构包括前端和后端两部分,前端包括词法分析、语法分析和语义分析,后端包括中间代码生成、代码优化和目标代码生成。
第二章,词法分析。
2.1 什么是词法分析?词法分析是编译器中的第一个阶段,它将源程序中的字符序列转换成单词(Token)序列。
2.2 词法分析的主要任务是什么?词法分析的主要任务是识别源程序中的单词,并将其转换成单词符号表中的标识符。
2.3 词法分析中常见的错误有哪些?词法分析中常见的错误包括非法字符、非法注释、非法标识符等。
第三章,语法分析。
3.1 什么是语法分析?语法分析是编译器中的第二个阶段,它将词法分析得到的单词序列转换成抽象语法树。
3.2 语法分析的主要任务是什么?语法分析的主要任务是识别源程序中的语法结构,并检查语法的正确性。
3.3 语法分析中常见的错误有哪些?语法分析中常见的错误包括语法错误、缺失分号、缺失括号等。
第四章,语义分析。
4.1 什么是语义分析?语义分析是编译器中的第三个阶段,它对源程序的语义进行分析和处理。
《编译原理》练习题一一、填空题(每空1分)1.设G [S ]是一个文法,我们把能由文法的 (1) 推导出来的符号串α称为G 的一个句型。
当句型α仅由 (2) 组成时 (即α∈V T *),则将它称为G 产生的句子。
2.从某一给定的状态q 出发,仅经过若干条 (3) 的矢线所能达到的状态所组成的集合称为ε-CLOSURE(q)。
3.设G=(V N ,V T ,P,S)是一文法,我们说G 中的一个符号X ∈V N ∪V T 是有用的,是指X 至少出现在 (4) 的推导过程中,否则,就说X 是无用的。
我们将不含形如A→A 的产生式和不含无用符号及无用产生式的文法称为 (5) 。
4.我们常采用形如 (class, value)的二元式作为一个单词的 (6) 。
其中,class 是一个整数,用来指示该单词的 (7) ,value 则是单词之值。
5.一个文法G[S]可表示成形如 (8) 的四元式。
其中V N ,V T ,P 均为非空的有限集,分别称为非终结符号集、终结符号集和产生式集, S ∈V N 为文法的开始符号。
此外,将出现在各产生式左部和右部的一切符号所组成的集合称为 (9) ,记作V 。
显然,V=V N ∪V T ,V N ∩V T =∅。
6.通常,可通过两种途径来构造词法分析程序。
其一是根据对语言中各类单词的某种描述或定义,用 (10) 构造词法分析程序;另外一种途径是所谓词法分析程序的(11) 。
7.设G 为一文法,A→α是G 的一个产生式,如果α具有υAδ的形式,其中υ,δ不同时为ε,则称产生式A→α是 (12) 。
若存在推导δυαA A *⇒⇒,则称产生式A→α是 (13) 。
8.设M=(K,Σ,f,S 0,Z)为一DFA ,并设s 和t 是M 的两个不同状态,我们说状态s,t 为某一输入串w (14) ,是指从s,t 中之一出发,当扫视完w 之后到达M 的终态,但从其中的另一个状态出发,当扫视完同一个w 后而进入 (15) 。
第一次研讨、第一批(第3周)1.讨论:(1)编译方法与解释方法的主要区别(2)编译程序组合中分端(前端/后端)和分遍(单遍/多遍)的作用(3)编译程序生成方法中自编译与自展的含义2.编写PL/0程序,功能:输入正整数n,求sum = 1! + 2 ! + ... + n!3.扩充PL/0语言文法的定义,增加实数类型和数组类型。
例:Var i:integer;r:real;A:array[1..10]of real;……A[i]:=r;4.设有下列文法G1[S]和G2[S]:1)指出文法的类型2)证明两者等价G1[S]:S→aAb | bBaA→aA | aB→Bb | bG2[S]:S→aA | bBA→aA | aCB→bB | bDC→bD→a5. 构造一个文法,使其语言是奇数集,且每个奇数不以0开头。
6.文法G[S] 的一个句子abbba 的语法树如下图:SA B aA b b Ba b1) G[S]可能包含哪些产生式?2) 给出句子abbba的规范推导。
3) 求出句子abbba 的句柄。
7.设有上下文无关文法G[S]:S→aAb A→aB A→a B→bA B→b 试构造与G[S]等价的正规文法。
8 实验一识别标识符(A)第一次研讨、第二批(第4周)1.编写PL/0程序,输入正整数n、x1、x2、…、x n,计算:S= ∑ x i/i! i=1~n。
2.构造下列语言的文法,并分析比较(1)L1(G)={a n b n|n≥1}(2)L2(G)={(ab) n|n≥1}(3)L3(G)={a n b m|n,m≥0}(4)L4(G)={a n b m|n,m≥1}3.定义一个文法,产生表达式E:1)含有双目运算符+,*2)+ 的优先级高于*3)+ 右结合,* 左结合4)运算对象为标识符i5)可用括号改变算符的优先级4.扩充PL/0语言文法的定义, 增加for语句的功能。
for语句的示例如下:for i:= 1 to 100 do s:=s+i;5.定义一个文法,产生下列语言:该语言由a、b符号串组成,串中a和b的个数相同6.证明下列文法为二义文法(能否转换为等价的非二义文法?)⑴G1[S]:S→A A→AA A→aAb A→ab⑵G2[S]:S→aSb S→Sb S→b7.试写出V T={0,1},分别满足下述要求的正则表达式:⑴所有以1开始和0结束的符号串。
⑵恰含有3个1的所有符号所组成的集合。
⑶集合{01,1}。
⑷所有以111结束的符号串。
8.实验一识别标识符(B)第二次研讨、第一批(第5周)1.构造一个DFA,接受∑={a,b}上由正规式aa*(a|ba)*b 定义的字符串并给出相应的正规文法。
2. 写出<简单查询语句>的文法.例如: 有2个关系R ( a,b,c),S (c,d,e)。
以下是简单查询语句的样例:语句1: SELECT a, b FROM R WHERE a=15 OR b<18;语句2: SELECT R.a, S.c FROM R , S WHERE R.c=S.c AND R.b<18; 3.下面文法G[S]产生a、b字符数相等的非空a、b字符串。
S → aB | bAB → bS | aBB | bA → aS | bAA | a1)证明该文法是二义的。
2)修改上述文法,使之非二义。
4.试用有限自动机的等价性证明以下2个正规式((a|b)*|aa)*b和(a|b)*b是等价的,并给出相应的正规文法。
5.写出Σ={a,b}上L={ w | w 中的a 的个数为偶数}的正规式,构造接受L的DFA。
6. 构造一个最简的DFA M,接受Σ={a,b}上同时满足下列条件的符号串:1)以a开头,以b结尾;2)符号串中包含“aba”。
7.有一台自动售货机,接收1分和2分硬币,出售3分一块的硬糖。
顾客每次向机器中投放一个硬币,当投放硬币额>=3分时,机器会给顾客一块硬糖(只给糖不找钱)。
1)写出售后机售糖的正规表达式;2)构造识别上述正规表达式的最简DFA。
8. 实验二词法分析(A)第二次研讨、第二批(第6周)1.给出<嵌套查询语句>的文法。
例如:有2个关系R ( a,b,c),S (c,d,e)。
以下是嵌套查询语句的样例:语句:SELECT a,bFROM RWHERE R.c in (SELECT S.cFROM SWHERE d=15);2.构造一个最简DFA M,接受∑={d,.,e},∑上的正规式dd*.dd*(edd*∣ε)表示的无符号数的集合。
其中d 为0~9的数字。
3.正规文法(又称为右线性文法):文法中每一条产生式α→β的形式都为:A→aB或A→a。
左线性文法:每一条产生式α→β的形式都为:A→Ba或A→a。
设计一个算法,把给定的左线性文法转换为等价的右线性文法。
4. 构造一个DFA M,接受Σ={a,b}上满足下列条件的符号串:1)以a开头,以b结尾;2)不包含“aba”。
5.对一个文法若消除了左递归,提取了左公共因子后是否一定为LL(1))文法?试举例说明。
6.已知文法G[E]的定义如下:E → E + T | TT → T * F | FF → (E) | i试构造一组递归下降分析子程序,使之识别G[E]所产生的语言。
7.语言可接受的合法文件名为:device:name.extension,其中device、name、extension是长度至少为1的字符串,而且第一部分(device:)和第三部分(.extension)可缺省。
试画出识别这种文件名的最简DFA。
8.实验二词法分析(B)第三次研讨、第一批(第7周)1.设有文法G[S]:S→SaF | F F→FbP | P P→c | d(1) 构造G[S]的算符优先关系表(2) 分别给出cadbdac# 和dbcabc# 的分析过程2.已知文法G[P]的定义如下:P → begin D S endD → D; d | dS → S; s | s试构造一组递归下降分析程序,使之识别G[P]所产生的语言。
3.设有文法G[S]:S→a B c | b A B A→a A b | b B→b |(1) 证明G[S]是一个LL(1)文法。
(2) 构造G[S]的预测分析表。
(3) 给出baabbb 的分析过程。
4.设有文法G[S’]: (0) S’→S (1) S→SaA (2) S→a (3) A→AbS (4) A→b(1) 构造G[S]的LR(0)项目规范族C={I0,I1,…In}。
(2) 构造SLR(1)分析表,判断G[S]的文法类型。
(3) 写出句子aabba 的分析过程。
5.设采用自底向上的移进-归约语法分析,属性文法G[A]如下:A→ a B { print “0”}A→ c { print “1”}B→ A b { print “2”}(1) 输入为aacbb 时,打印的符号串是什么?(2) 写出aacbb的语法制导分析过程。
6.设有文法G[E]:E→E+T | E∨T | TT→T*F | T∧F | FF→num | bool |(E)设计G[E]的语义子程序,对表达式进行类型检查并翻译为逆波兰式。
7.设有文法G[number]:number → num·numnum→digit num | digitdigit→ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7| 8 | 9设计G[number]的语义子程序,计算实数number的值。
8.实验三语法分析(A)第三次研讨、第二批(第8周)1.设有文法G[S]:S→A A→A m D n | B B→a | m S n D→S | DbS(1) 构造G[S]的算符优先关系表。
(2) 给出aman# 和maban# 的分析过程。
(3) 由(2)说明算符优先分析算法的局限性。
2.设有文法G[E]:E→ETE |(E)| iT→ + | *(1) 证明G[E]是一个非LL(1)文法。
(2) 把G[E]等价改写为LL(1)文法G1[E],并构造其预测分析表。
(3) 给出句子(i+i)* (i+i) 的分析过程。
3.设有文法G[S]: S → Ab | BaA → aA | aB → a将其改造成LL(1)文法,并编写递归下降分析程序,使之识别G[S]所产生的语言。
4.设有文法G[S’]: (0) S’→S (1) S→aS (2) S→bA (3) A→dA (4) A→d(1) 构造G[S]的LR(0)项目规范族C={I0,I1,…In},(2) 说明G[S]属于哪一种LR文法,构造相应的LR分析表(3) 写出句子aabbd的分析过程。
5.写出表达式(a+b*c)/(a+b)-d的四元式,逆波兰式及三元式序列。
6.条件语句的语法简写为:S → iSeS | iS | S ; S | a其中: i代表if,e代表else,a代表赋值语句。
如果规定:(1) else与其左边最近的if结合;(2) ;服从左结合。
请给出文法中i、e和;的优先关系,然后构造出无二义的LR分析表,并对输入串iiaea写出分析过程。
7.设采用自底向上的移进-归约语法分析,属性文法G[E]如下:E → E + T { print “0”}E → T { print “1”}T → T * F { print “2”}T → F { print “3”}F → (E) { print “4”}F → i { print “5”}写出i*(i+i*i)的语法制导分析过程,打印的符号串是什么?8.实验三语法分析(B)第四次研讨、第一批(第9周)1.以下是简单表达式(只含有加、减运算)计算的一个属性文法G(E):E → TR { R.in := T.val ; E.val := R.val }R → +TR1{ R1.in := R.in + T.val ; R.val := R1.val }R → -TR1{ R1.in := R.in - T.val ; R.val := R1.val }R → { R.val := R.in }T → num { T.val := lexval(num) }其中:lexval(num)表示从词法分析程序得到的常数的值。
试给出表达式8-3+6的语法树和相应的带标注语法分析树。
2.教材P224 第4题。
3.写出下列语句的三地址中间代码(四元式序列):while (A<C or B<D ) dobeginif (A>=1) then C:=C+1else while (A<=D) doA:=A+2;end4.教材P252 第2题5.对下列基本块B应用DAG进行优化,设只有U,V在基本块后面还要继续引用。