【发布时间】:2019-10-08 15:47:50
【问题描述】:
给定一个类似的语法
<term>::= x[i]+exp(x[i]) | x[i]
<i>::= 1|2|3
是否存在强制在非终结符号的一个解决方案中使用相同的“i”的方法?所以,我想避免像 x[1]+exp(2) 或 x[3]+exp(1) 这样的解决方案 是否存在一种方法来避免在非终结符号的一个解决方案中使用相同的“i”?所以,我想避免像 x[1]+exp(1)
这样的解决方案【问题讨论】:
给定一个类似的语法
<term>::= x[i]+exp(x[i]) | x[i]
<i>::= 1|2|3
是否存在强制在非终结符号的一个解决方案中使用相同的“i”的方法?所以,我想避免像 x[1]+exp(2) 或 x[3]+exp(1) 这样的解决方案 是否存在一种方法来避免在非终结符号的一个解决方案中使用相同的“i”?所以,我想避免像 x[1]+exp(1)
这样的解决方案【问题讨论】:
不,这对于上下文无关语法是不可能的。
这本质上就是“无上下文”的意思。产生式中的每个非终结符都可以独立扩展,而无需考虑其出现的上下文。
当然,如果i 真的只有三个可能的值,您可以根据任何您认为方便的“合法”定义枚举有限数量的合法产生式。但是当可能性的数量增加时,这会变得非常混乱。
最方便的解决方案通常是接受基本语法并检查相关语义规则中的一致性(或差异)。这也允许更好的错误消息。
【讨论】: