语法:语法选择的优先级
Grammar: Precedence of grammar alternatives
这是一个关于语法选择的非常基本的问题。如果您有以下选择:
Myalternative: 'a' | .;
Myalternative2: 'a' | 'b';
'a' 会比 '.' 有更高的优先级吗?及以上 'b'?
我知道这也可能取决于此语法生成的解析器的行为,但在纯理论语法术语中,您可以想象这些规则是并行匹配的,即针对 'a' 和 '.' 进行测试。同时 select 优先级最高的那个?或者是 'a' 和 .由于语法中缺乏优先级而产生歧义?
答案主要取决于您使用的工具,以及该工具的语义。如所写,这不是规范形式的上下文无关语法,您需要生成它才能获得理论上的答案,因为只有这样才能阐明预期的语义。
由于问题被标记为 antlr,我猜测这是 Antlr 词法定义的一部分,其中 .
是通配符。在那种情况下,'a' | .
意味着 与 .
完全相同。
由于 MyAlternative
匹配 MyAlternative2
匹配的所有内容,并且由于 MyAlternative
在 Antlr 词法定义中排在第一位,因此 MyAlternative2
永远无法匹配任何内容。 MyAlternative
将匹配任何单个字符(除非有一些其他词法规则匹配更长的输入字符序列)。
如果将MyAlternative2
的定义放在语法文件的最前面,那么a
或b
将被匹配为MyAlternative2
,而任何其他字符将被匹配匹配为 MyAlternative
.
选项中的优先级问题毫无意义。 MyAlternative
将 a
的匹配视为 a
的匹配还是 .
的匹配并不重要。它最终是 MyAlternative
的匹配项,并且该符号只能有一个关联操作。
词法规则之间存在优先关系:第一个为准。 (更准确地说,据我所知,Antlr 遵循通常的惯例,即最长的匹配获胜;在两个匹配相同最长序列的规则之间,语法文件中的第一个规则获胜。)这不受任何方式的影响规则本身中的替代栏。
这是一个关于语法选择的非常基本的问题。如果您有以下选择:
Myalternative: 'a' | .;
Myalternative2: 'a' | 'b';
'a' 会比 '.' 有更高的优先级吗?及以上 'b'?
我知道这也可能取决于此语法生成的解析器的行为,但在纯理论语法术语中,您可以想象这些规则是并行匹配的,即针对 'a' 和 '.' 进行测试。同时 select 优先级最高的那个?或者是 'a' 和 .由于语法中缺乏优先级而产生歧义?
答案主要取决于您使用的工具,以及该工具的语义。如所写,这不是规范形式的上下文无关语法,您需要生成它才能获得理论上的答案,因为只有这样才能阐明预期的语义。
由于问题被标记为 antlr,我猜测这是 Antlr 词法定义的一部分,其中 .
是通配符。在那种情况下,'a' | .
意味着 与 .
完全相同。
由于 MyAlternative
匹配 MyAlternative2
匹配的所有内容,并且由于 MyAlternative
在 Antlr 词法定义中排在第一位,因此 MyAlternative2
永远无法匹配任何内容。 MyAlternative
将匹配任何单个字符(除非有一些其他词法规则匹配更长的输入字符序列)。
如果将MyAlternative2
的定义放在语法文件的最前面,那么a
或b
将被匹配为MyAlternative2
,而任何其他字符将被匹配匹配为 MyAlternative
.
选项中的优先级问题毫无意义。 MyAlternative
将 a
的匹配视为 a
的匹配还是 .
的匹配并不重要。它最终是 MyAlternative
的匹配项,并且该符号只能有一个关联操作。
词法规则之间存在优先关系:第一个为准。 (更准确地说,据我所知,Antlr 遵循通常的惯例,即最长的匹配获胜;在两个匹配相同最长序列的规则之间,语法文件中的第一个规则获胜。)这不受任何方式的影响规则本身中的替代栏。