语法:语法选择的优先级

Grammar: Precedence of grammar alternatives

这是一个关于语法选择的非常基本的问题。如果您有以下选择:

Myalternative: 'a' | .;
Myalternative2: 'a' | 'b';

'a' 会比 '.' 有更高的优先级吗?及以上 'b'?

我知道这也可能取决于此语法生成的解析器的行为,但在纯理论语法术语中,您可以想象这些规则是并行匹配的,即针对 'a' 和 '.' 进行测试。同时 select 优先级最高的那个?或者是 'a' 和 .由于语法中缺乏优先级而产生歧义?

答案主要取决于您使用的工具,以及该工具的语义。如所写,这不是规范形式的上下文无关语法,您需要生成它才能获得理论上的答案,因为只有这样才能阐明预期的语义。

由于问题被标记为 ,我猜测这是 Antlr 词法定义的一部分,其中 . 是通配符。在那种情况下,'a' | . 意味着 . 完全相同

由于 MyAlternative 匹配 MyAlternative2 匹配的所有内容,并且由于 MyAlternative 在 Antlr 词法定义中排在第一位,因此 MyAlternative2 永远无法匹配任何内容。 MyAlternative 将匹配任何单个字符(除非有一些其他词法规则匹配更长的输入字符序列)。

如果将MyAlternative2的定义放在语法文件的最前面,那么ab将被匹配为MyAlternative2,而任何其他字符将被匹配匹配为 MyAlternative.

选项中的优先级问题毫无意义。 MyAlternativea 的匹配视为 a 的匹配还是 . 的匹配并不重要。它最终是 MyAlternative 的匹配项,并且该符号只能有一个关联操作。

词法规则之间存在优先关系:第一个为准。 (更准确地说,据我所知,Antlr 遵循通常的惯例,即最长的匹配获胜;在两个匹配相同最长序列的规则之间,语法文件中的第一个规则获胜。)这不受任何方式的影响规则本身中的替代栏。