Parsing ANTLR模糊度

Parsing ANTLR模糊度,parsing,antlr,ambiguous-grammar,Parsing,Antlr,Ambiguous Grammar,我需要在ANTLR中匹配一条消息,该消息包含两个由/ 第一个字段可以有1..3位数,第二个字段可以有1..2位数 这行不通 msg: f1 '/' f2; f1: DIGIT(DIGIT(DIGIT)?)? ; f2: DIGIT(DIGIT)? 在这种情况下,我如何避免歧义 用ANTLR表示重复次数是否有更优雅的方法 非常感谢 ChrisAFAIR(我上次使用ANTLR是很久以前的事了),您可以使用“fragment”来避免将f1和f2作为顶级标记: msg: f1 '/' f2; fr

我需要在
ANTLR
中匹配一条消息,该消息包含两个由/ 第一个字段可以有
1..3位数,第二个字段可以有
1..2位数

这行不通

msg: f1 '/' f2;

f1: DIGIT(DIGIT(DIGIT)?)? ;
f2: DIGIT(DIGIT)?
  • 在这种情况下,我如何避免歧义
  • ANTLR
    表示重复次数是否有更优雅的方法
  • 非常感谢 Chris

    AFAIR(我上次使用ANTLR是很久以前的事了),您可以使用“fragment”来避免将f1和f2作为顶级标记:

    msg: f1 '/' f2;
    
    fragment f1: DIGIT(DIGIT(DIGIT)?)? ;
    fragment f2: DIGIT(DIGIT)?
    

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

    我仍然得到相同的错误:-([MismatchedTokenException]谢谢!对不起,我的错误:我解决了它;如果DIGIT也是一个片段,它不起作用;如果DIGIT不是片段,它起作用!!谢谢