编译原理第三章测试题
一、名词解释
1. 上下文无关文法:

2. LL(1)文法:

3. LR文法:
我们能为之构造出所有条目都唯一的LR分析表。
4. 句柄:
句型的句柄是和某产生式右部匹配的子串,并且,把它归约成该产生式左部的非终结符代表了最右推导过程的逆过程的一步。
二、简答题
1. 为什么要把词法分析器和语法分析器分离?
为什么要用正规式定义词法
- 词法规则非常简单,不必用上下文无关文法
- 对于词法记号,正规式描述简洁且易于理解
- 从正规式构造出的词法分析器效率高
从软件工程角度看,词法分析和语法分析的分离有如下好处:
- 简化设计(划分模块)
- 编译器的效率会改进
- 编译器的可移植性加强(相关修改限制在词法分析器中)
- 便于编译器前端的模块划分
能否把词法分析并入到语法分析中,直接从字符流进行语法分析
- 若把词法分析和语法分析合在一起,则必须将语言的注解和空白的规则反映在文法中,文法将大大复杂
- 注解和空白由自己来处理的分析器,比注解和空格已由词法分析器删除的分析器要复杂得多
2. 比较分析LL分析方法和LR分析方法。



3.比较分析 SLR、规范的LR和LALR的区别。
-
LALR和SLR的分析表有同样多的状态,比规范LR分析表要小得多
-
LALR的能力介于SLR和规范LR之间
-
LALR的能力在很多情况下已经够用
-
SLR(1)文法的描述能力有限,可能产生移进-规约冲突。
-
规范的LR分析表
LR(1)项目:
重新定义项目,让它带上搜索符,成为如下形式 [A → α · β, a] -
LALR的分析表
同心的LR(1)项目集:
略去搜索符后它们是相同的集合 -
LALR同心集的合并不会引起新的移进-归约冲突;同心集的合并有可能产生新的归约-归约冲突
三.应用题
1. 写出下列文法的FIIRST集和FOLLOW集,并写出预测分析表。
相似题目:




2. 判断文法是不是SLR(1)文法,并解释。如果不是,那么它是不是LR(1)文法?
从DFA构造SLR分析表

如果出现动作冲突,那么该文法就不是SLR(1)的
构造规范的LR分析表

如果用上面规则构造出现了冲突,那么文法就不是LR(1)的
相似题目:










浙公网安备 33010602011771号