若有不对之处,敬请指出。
1、先分别用以下文法推导出id+id+id*id,并画出推导过程对应的分析树;最后比较三个文法生成的语言有什么不同。
文法1:E→ E+T | T T→ T*F | F F→ id
文法2:E→ T+E | T T→ F*T | F F→ id
文法3:E→ E*T | T T→ T+F | F F→ id
文法1:E→ E+T | T T→ T*F | F F→ id
文法2:E→ T+E | T T→ F*T | F F→ id
文法3:E→ E*T | T T→ T+F | F F→ id
三个文法均包括两个运算+和*,但在结合性和优先级的处理上有所不同:
文法1左结合,先*后+
文法2右结合,先*后+
文法3左结合,先+后*
2、指出下列错误可在编译的哪个阶段被发现
(1)关键字拼写错误 语法分析
(2)缺少运算对象 语法分析
(3)实参与形参的类型不一致 语义分析
(4)所引用的变量没有定义 语义分析
(5)数组下标越界 语义分析
(6)本应为常数,但却在数中出现了非数字字符
词法分析
3.编译器和解释器之间的区别是什么?
编译器将高级语言编写的源程序翻译成等价的,用低级语言编写的目标程序,解释器则是执行源程序,只是将源程序转换成一次执行的中间代码,并不生成目标程序。
4.编译器相对于解释器的优点是什么?解释器相对于编译器的优点是什么?
由于编译器生成的目标程序将多次执行,故编译过程中优化工作非常重要,产生的目标程序比解释执行更为高效。
由于解释器是逐句执行,故其错误诊断效果好于编译器。
5.下面关于解释程序的说法正确的是:
①.解释程序解决了编译程序不能解决的问题。
②.Basic语言编写的程序采用的执行方式是解释执行。
③.解释语言的特点是执行程序时不产生目标代码。
A. ①② B. ②③ C.③① D.③
B. Basic 执行是解释型即解释便运行
6.描述一种语言的文法是:
A.唯一的 B.不唯一的 C.个数有限的 D.不能确定
B
7.下面哪些不是语法分析器的任务。
①分析单词是怎样构成的
②分析单词串是如何构成语句和说明的
③分析语句和说明是如何构成程序的
④分析程序的结构
7.给定文法G[A]: A→bA|cc,则下面的符号串中,该文法的句子有:
cc bcbc bcbcc bbbcc
cc bbbcc
8.描述语言L={a^mb^n|n≥m≥ 1}的文法为:
A、 Z→ABb A→aA|a B→bB|b
B、 Z→ABb A→Aa|a B→aBb|b
C、 Z→Ab A→aAb|a
D、 Z→aAb A→Ab|aAb|ε
D
原文:http://blog.csdn.net/zhuangjingyang/article/details/40049393