第一章
编译原理的基础问答
- 设 A机器 上有 语言L 的编译程序,可以用它来编制B机器上的语言'的编译程序,试用 T形图 进行表示。
- 通过自展完成C语言的编写,试描述这个过程。
- 画出编译程序的总体结构图,简要说明每个模块的功能
- 如何理解“单词是程序设计语言中具有独立意义的最小语法单位”这句话?
- 设
∑={aa,ab,bb,ba}
,求字符串aaaaabbbba
的所有前缀的集合、后缀的集合、真前缀的集合、真后缀的
集合。
部分答案
- 画出编译程序的总体结构图,简要说明每个模块的功能
- 如何理解“单词是程序设计语言中具有独立意义的最小语法单位”这句话?
单词是由字母所组成的,而字母往往是有限的,难以表达更加复杂和高级的含义;
所以由字母依照一定的文法所组成的单词就承担了语义表达的作用,而在单词之上则是句子,能够表达更加复杂的语义。
所以相较之下,单词就是具有独立意义的最小语法单位了。
第二章
- 设文法G有如下产生式:
G:A → B=EB → C|DC → a|b|cD → m[1]|m[2]lm[3]E → COC|COD|DOC|DODO → +|-
现有句子b=a+b
,m[2]=b+m[1]
,试完成下列题目。
(1)分别给出每个句子的3个不同推导,要求有最左推导和最右推导。
(2)给出上面6个不同推导各自对应的归约。
(3)试画出相应的语法树。
(4)指出每个句子中的短语、简单短语和句柄。
第三章
- 在文法中,终结符号和非终结符号各起什么作用?各用来表示什么类型的对象?有什么不同的特点?
- 什么是语法制导定义?什么是属性文法?什么是翻译模式?它们之间的关系是什么?
- 画出有穷状态自动机的状态转换图,分别识别下列文法生成的语言。
第四章
- 考虑简化了的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:
(1)给出 (a,(a,a))
和 (((a,a),,(a)),a)
的最左推导和最右推导。
(2)指出 (((a,a),^,(a)),a)
的规范归约及每一步的句柄。根据该规范归约,给出“移进-归约”的过程,
并给出自底向上构造其语法树的过程。
(3)求其 FIRSTOP
和 LASTOP
。
(4)计算其优先关系,并判断其是否为算符优先文法。
(5)计算其优先函数。
- 设有如下文法G:
(1)计算该文法的 LR(0)
项目集规范族,构造识别其所有规范句型活前缀的DFA。
(2)该文法是 LR(0)
文法吗?请说明理由。
(3)构造该文法的 SLR(1)
分析表。
(4)给出识别句子 a(a(a))
的自底向上语法分析的过程。
- 设有如下文法G:
(1)试用识别活前缀的方式给出文法G的 LR(1)
项目集。
(2)构造 G
的 LR(1)
分析表。
(3)给出输入符号串w=abab的自底向上语法分析过程。
第六章
- 给定如下翻译模式:
A→aB {print"0";}
A→c {print"1";}
B→Ab {print"2";}
假设在按某一产生式进行归约时将立即执行括号中的动作,试问当输人为aabb时,打印出的字符串是什么?
- 综合属性和继承属性有什么区别?为什么将固有属性归入综合属性,这样归类的依据是什么?