某程序设计语言的表达式由运算符θ1、θ2、θ3、标识符、(、)组成,其中θ1和θ2的优先级相同,θ3的优先级低于θ1、θ2的优先级,优先级相同的运算符从右往左计算,可以用括号改变运算的顺序,则下述四种

文章讨论了如何根据运算符的优先级和结合顺序来确定程序设计语言表达式的文法结构,指出θ3优先级较低,应先处理。通过分析排除了左递归和部分右递归选项,最终确定了正确文法为右递归且θ3靠近开始符号的d选项。

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

某程序设计语言的表达式由运算符θ1、θ2、θ3、标识符、(、)组成,其中θ1和θ2的优先级相同,θ3的优先级低于θ1、θ2的优先级,优先级相同的运算符从右往左计算,可以用括号改变运算的顺序,则下述四种文法中哪一个可以描述上述的表达式文法?

设E为识别符号,终结符号集={θ1、θ2、θ3、(、)、I},非终结符号集={E、T、F}。

a.   

E → T | E θ1 T | E θ2 T
T → F | T θ3 F
F → (E) | I

b.   

E → T | T θ1 E | T θ2 E
T → F | F θ3 T
F → (E) | I

c.   

E → T | E θ3 T
T → F | T θ1 F | T θ2 F
F → (E) | I

d.   

E → T | T θ3 E
T → F | F θ1 T | F θ2 T
F → (E) | I

答:

(对于一个包含运算符的语言,运算符的结合顺序、运算符的优先级在文法中反映为递归的方向和推导(或规约)的先后,左递归表明左边的运算先处理,对应的运算符左结合;右递归表明右边的运算先处理,对应的运算符右结合。两个运算符连续出现,后推导出(或先被规约)的,表明其运算先被处理,因此优先级高;反之,先推导出(或后被规约)的,表明其运算后被处理,因此优先级低。)

题意要求:θ1θ2的优先级相同,θ3的优先级低于θ1θ2的优先级,因此θ3θ1θ2先推导出来,即应为图3所示的四种情形。

                              图3可能的文法推导顺序

因此ab不成立。

又因为优先级相同的运算符从右往左计算,应采用右递归,即应为图4所示的情形。

 

                              4可能的文法递归结构

c不成立,应为d


总结:

(1)优先级最低的终结符VT,出现在开始符号S的产生式中;

(2)优先级越低的VT离开始符号S越近;

(3)左结合——左递归

         右结合——右递归

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值