[龙书]理论练习题(一)

本文详细探讨了三种文法推导id+id+id*id的过程及语言差异,解析了编译阶段的关键错误类型及其发现阶段,解释了编译器与解释器的区别,并讨论了它们各自的优缺点。同时,文章还涉及了语言文法的非唯一性、语法分析器的任务以及特定文法和语言的描述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  若有不对之处,敬请指出。



  1、先分别用以下文法推导出id+id+id*id,并画出推导过程对应的分析树;最后比较三个文法生成的语言有什么不同。

  文法1:E→ E+T | T    TT*F | F     Fid

  文法2:ET+E | T    TF*T | F     Fid

  文法3:EE*T | T    TT+F | F     Fid






文法1:E→ E+T | T    TT*F | F     Fid

文法2:ET+E | T    TF*T | F     Fid

文法3:EE*T | T    TT+F | F     Fid

三个文法均包括两个运算+和*,但在结合性和优先级的处理上有所不同:

文法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|nm 1}的文法为:


A、   Z→ABb       AaA|a         BbB|b

B、   ZABb       AAa|a         BaBb|b

C、   ZAb          AaAb|a

D、   ZaAb        AAb|aAb|ε


D





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值