《编译原理》课程研讨题(2016)

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

第三次研讨、第二批(第 8 周)
1.设有文法 G[S]:S→A A→A m D n | B B→a | m S n (1) 构造 G[S]的算符优先关系表。 (2) 给出 aman# 和 maban# 的分析过程。 (3) 由(2)说明算符优先分析算法的局限性。 D→S | DbS
2.设有文法 G[E]:E→ETE |(E)| i T→ + | * (1) 证明 G[E]是一个非 LL(1)文法。 (2) 把 G[E]等价改写为 LL(1)文法 G1[E],并构造其预测分析表。 (3) 给出句子(i+i)* (i+i) 的分析过程。 3. 设有文法 G[S]: S → Ab | Ba A → aA | a B→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 ) do begin if (A>=1) then C:=C+1 else while (A<=D) do A:=A+2; end 4.教材 P252 第 2 题 5.对下列基本块 B 应用 DAG 进行优化,设只有 U,V 在基本块后面还要继续 引用。 B: T0:=100 T1:=k+T0 T2:=T0*2 U:=T1+T2 T3:=k+T0 V:=T3*U 6.1)把下列中间代码序列划分为基本块并作出其流图 (1) (2) (3) (4) L4: (5) (6) read(C) A=0 B=1 A=A+B if B>C goto L2 B=B+1
第三次研讨、第一批(第 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 end D → D; d | d S → S; s | s 试构造一组递归下降分析程序,使之识别 G[P]所产生的语言。 3.设有文法 G[S]:S→a B c | b A B (1) 证明 G[S]是一个 LL(1)文法。 (2) 构造 G[S]的预测分析表。 (3) 给出 baabbb 的分析过程。 A→a A b | b B→b |
4.设有文法 G[S’]: (0) S’→S (1) S→SaA (2) S→a (3) A→AbS (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 的语法制导分析过程。
(4) A→b
6.设有文法 G[E]:E→E+T | E∨T | T T→T*F | T∧F | F F→num | bool |(E) 设计 G[E]的语义子程序,对表达式进行类型检查并翻译为逆波兰式。 7.设有文法 G[number]:number → num· num num→digit num | digit digit→ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7| 8 | 9 设计 G[number]的语义子程序,计算实数 number 的值。 8.实验三 语法分析(A)
第一次研讨、第二批(第 4 周)
1.编写 PL/0 程序,输入正整数 n、x1、x2、…、xn,计算:S= ∑ xi/i! i=1~n。 2.构造下列语言的文法,并分析比较 (1)L1(G)={anbn|n≥1} (2)L2(G)={(ab) n|n≥1} (3)L3(G)={anbm|n,m≥0} (4)L4(G)={anbm|n,m≥1} 3.定义一个文法,产生表达式 E: 1)含有双目运算符 +,* 2)+ 的优先级高于* 3)+ 右结合,* 左结合 4)运算对象为标识符 i 5)可用括号改变算符的优先级 4.扩充 PL/0 语言文法的定义, 增加 for 语句的功能。 for 语句的示例如下: for i:= 1 to 100 do s:=s+i; 5.定义一个文法,产生下列语言: 该语言由 a、b 符号串组成,串中 ቤተ መጻሕፍቲ ባይዱ 和 b 的个数相同 6.证明下列文法为二义文法(能否转换为等价的非二义文法?) ⑴ G1[S]:S→A A→AA A→aAb A→ab ⑵ G2[S]:S→aSb S→Sb S→b 7.试写出 VT={0,1},分别满足下述要求的正则表达式: ⑴ 所有以 1 开始和 0 结束的符号串。 ⑵ 恰含有 3 个 1 的所有符号所组成的集合。 ⑶ 集合{01,1}。 ⑷ 所有以 111 结束的符号串。
编 译 原 理
课程学习研讨题
上海大学计算机学院 《编译原理》课程组 2016 年 3 月
第一次研讨、第一批(第 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 | bBa A→aA | a B→Bb | b G2[S]:S→aA | bB A→aA | aC B→bB | bD C→b D→a 5. 构造一个文法,使其语言是奇数集,且每个奇数不以 0 开头。 6.文法 G[S] 的一个句子 abbba 的语法树如下图: S A B a A b bB a b 1) G[S]可能包含哪些产生式? 2) 给出句子 abbba 的规范推导。 3) 求出句子 abbba 的句柄。 7.设有上下文无关文法 G[S]:S→aAb A→aB A→a B→bA B→b 试构造与 G[S]等价的正规文法。 8 实验一 识别标识符(A)
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 | bA B → bS | aBB | b A → aS | bAA | a 1)证明该文法是二义的。 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,b FROM R WHERE R.c in (SELECT S.c FROM S WHERE 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 |T T→T*F |F F → (E) | i 试构造一组递归下降分析子程序,使之识别 G[E]所产生的语言。 7. 语言可接受的合法文件名为: device:name.extension ,其中 device 、 name 、 extension 是长度至少为 1 的字符串,而且第一部分( device: )和第三部分 (.extension)可缺省。试画出识别这种文件名的最简 DFA。 8.实验二 词法分析(B)
相关文档
最新文档