编译原理-期末
第一章
编译原理的基础问答
- 设 A机器 上有 语言L 的编译程序,可以用它来编制B机器上的语言'的编译程序,试用 T形图 进行表示。
- 通过自展完成C语言的编写,试描述这个过程。
- 画出编译程序的总体结构图,简要说明每个模块的功能
- 如何理解“单词是程序设计语言中具有独立意义的最小语法单位”这句话?
- 设
∑={aa,ab,bb,ba},求字符串aaaaabbbba的所有前缀的集合、后缀的集合、真前缀的集合、真后缀的
集合。
部分答案
- 画出编译程序的总体结构图,简要说明每个模块的功能
![alt text]()
- 如何理解“单词是程序设计语言中具有独立意义的最小语法单位”这句话?
单词是由字母所组成的,而字母往往是有限的,难以表达更加复杂和高级的含义;
所以由字母依照一定的文法所组成的单词就承担了语义表达的作用,而在单词之上则是句子,能够表达更加复杂的语义。
所以相较之下,单词就是具有独立意义的最小语法单位了。
第二章
- 设文法G有如下产生式:
G:A → B=E
B → C|D
C → a|b|c
D → m[1]|m[2]lm[3]
E → COC|COD|DOC|DOD
O → +|-
现有句子b=a+b,m[2]=b+m[1],试完成下列题目。
(1)分别给出每个句子的3个不同推导,要求有最左推导和最右推导。
(2)给出上面6个不同推导各自对应的归约。
(3)试画出相应的语法树。
(4)指出每个句子中的短语、简单短语和句柄。
第三章
- 在文法中,终结符号和非终结符号各起什么作用?各用来表示什么类型的对象?有什么不同的特点?
- 什么是语法制导定义?什么是属性文法?什么是翻译模式?它们之间的关系是什么?
- 画出有穷状态自动机的状态转换图,分别识别下列文法生成的语言。
\[\begin{align}
&(1)G_1:\\
&S → +R|-R|0R|1R|2R|3R|4R\\
&R → 0R|1R|2R|3R|4R|0|1|2|3|4|0D|1D|2D|3D|4D\\
&D → .B\\
&B → 0B|1B|2B|3B|4B|0|1|2|3|4\\
&(2)G_2:\\
&S → as|aB|bB|bS\\
&B → -C|.C\\
&C → cC|dC|eC|fC|e|0E|1E|2E|3E|4E\\
&E → -A|+A\\
&A → 0A|1A|2A|3A|4A|0|1|2|3|4\\
&(3)G_3:\\
&S → Sa|Aa|Bb\\
&A → Ba|a\\
&B → Abb\\
&(4)G_4:\\
&S → aAa\\
&A → aA bB a\\
&B → bB|b\\
\end{align}
\]
第四章
- 考虑简化了的C声明的以下文法:
<declaration><type><var_list>
<pe>→int float
<var_list>id,<var_list>id
(1)在该文法中提取左因子。
(2)为改造后文法的语法变量构造 FIRST 集和 FOLL0OW 集。
(3)说明改造后的文法是 LL(1) 文法。
(4)为改造后的文法构造 LL(1) 分析表。
(5)给出输入串 intx,y,z 所对应的 LL(1) 分析动作。
第五章
- 在自顶向下的分析方法中,既不允许文法中出现直接左递归,又不允许出现间接左递归,为什么在自底向上的分析方法中没有这一要求?
- 设有如下文法G:
\[S\rightarrow a|^|(T)
T\rightarrow T,S|S
\]
(1)给出 (a,(a,a)) 和 (((a,a),,(a)),a) 的最左推导和最右推导。
(2)指出 (((a,a),^,(a)),a) 的规范归约及每一步的句柄。根据该规范归约,给出“移进-归约”的过程,
并给出自底向上构造其语法树的过程。
(3)求其 FIRSTOP 和 LASTOP 。
(4)计算其优先关系,并判断其是否为算符优先文法。
(5)计算其优先函数。
- 设有如下文法G:
\[<S>\rightarrow<S>(<S>)
<S>\rightarrow a
\]
(1)计算该文法的 LR(0) 项目集规范族,构造识别其所有规范句型活前缀的DFA。
(2)该文法是 LR(0) 文法吗?请说明理由。
(3)构造该文法的 SLR(1) 分析表。
(4)给出识别句子 a(a(a)) 的自底向上语法分析的过程。
- 设有如下文法G:
\[<S>\rightarrow <A>
<A>\rightarrow <B><A>|\epsilon
<B>\rightarrow a<B>|b
\]
(1)试用识别活前缀的方式给出文法G的 LR(1) 项目集。
(2)构造 G 的 LR(1) 分析表。
(3)给出输入符号串w=abab的自底向上语法分析过程。
第六章
- 给定如下翻译模式:
A→aB {print"0";}
A→c {print"1";}
B→Ab {print"2";}
假设在按某一产生式进行归约时将立即执行括号中的动作,试问当输人为aabb时,打印出的字符串是什么?
- 综合属性和继承属性有什么区别?为什么将固有属性归入综合属性,这样归类的依据是什么?

浙公网安备 33010602011771号