【问题标题】:Many instances of a terminal symbol in a BNF grammarBNF 文法中终结符号的许多实例
【发布时间】: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)

这样的解决方案

【问题讨论】:

    标签: grammar bnf


    【解决方案1】:

    不,这对于上下文无关语法是不可能的。

    这本质上就是“无上下文”的意思。产生式中的每个非终结符都可以独立扩展,而无需考虑其出现的上下文。

    当然,如果i 真的只有三个可能的值,您可以根据任何您认为方便的“合法”定义枚举有限数量的合法产生式。但是当可能性的数量增加时,这会变得非常混乱。

    最方便的解决方案通常是接受基本语法并检查相关语义规则中的一致性(或差异)。这也允许更好的错误消息。

    【讨论】:

    • 非常感谢。你的反应很清楚。当您写“检查一致性或差异”时,您的意思是在生成后验证规则是否满足我的约束,不是吗?
    • @antonio:准确地说。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    相关资源
    最近更新 更多