ANTLR 歧义

kcr*_*ris 5 parsing antlr ambiguous-grammar

我需要匹配ANTLR包含由 / 分隔的 2 个字段的消息,第一个字段可以有1..3数字,第二个字段可以有1..2数字,

这不起作用

msg: f1 '/' f2;

f1: DIGIT(DIGIT(DIGIT)?)? ;
f2: DIGIT(DIGIT)?
Run Code Online (Sandbox Code Playgroud)
  1. 在这种情况下,如何避免歧义?
  2. 有没有更优雅的方式来表达重复次数ANTLR

非常感谢克里斯

Chr*_*her 4

AFAIR(我上次使用 ANTLR 是在不久前),您可以使用“fragment”来避免将 f1 和 f2 作为顶级令牌:

msg: f1 '/' f2;

fragment f1: DIGIT(DIGIT(DIGIT)?)? ;
fragment f2: DIGIT(DIGIT)?
Run Code Online (Sandbox Code Playgroud)

这使得 f1 和 f2 之间存在歧义,因为它们不必单独匹配。