[英]Grammar: Precedence of grammar alternatives
这是关于语法选择的非常基本的问题。 如果您有以下选择:
Myalternative: 'a' | .;
Myalternative2: 'a' | 'b';
'a'优先于'。' 并超过“ b”?
我知道这也可能取决于此语法生成的解析器的行为,但是用纯理论语法术语,您可以想象这些规则是并行匹配的,即针对“ a”和“。”进行测试。 同时选择优先级最高的那个? 还是'a'和。 由于语法缺乏优先性而导致歧义?
答案主要取决于您所使用的工具以及该工具的语义。 如所写,这不是规范形式的无上下文语法,并且您需要产生该语法以获得理论上的答案,因为只有这样才能阐明预期的语义。
由于该问题被标记为antlr ,因此我猜这是Antlr词汇定义中的一部分.
是通配符。 在这种情况下, 'a' | .
'a' | .
与...的含义完全相同 .
。
由于MyAlternative
匹配一切MyAlternative2
匹配,并且由于MyAlternative
至上的ANTLR的词汇定义, MyAlternative2
不能匹配任何东西。 任何单个字符都将由MyAlternative
匹配(除非还有其他一些词汇规则匹配更长的输入字符序列)。
如果将MyAlternative2
的定义放在语法文件中的第一位,则a
或b
将与MyAlternative2
匹配,而其他任何字符将与MyAlternative
匹配。
优先的替代品中的问题是没有意义的。 不要紧是否MyAlternative
考虑的的比赛a
来是匹配a
或一个匹配.
。 最后,它是MyAlternative
的匹配MyAlternative
,并且该符号只能具有一个关联的动作。
在词汇规则之间,存在优先级关系:第一个获胜。 (据我所知,更准确地说,Antlr遵循最长匹配获胜的惯例;在两个规则都匹配相同最长序列的两个规则之间,语法文件中的第一个获胜。)无论如何,这不受任何影响规则本身中的替代条。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.