ANTLR4具有简单规则的奇怪行为

ANTLR4具有简单规则的奇怪行为,antlr4,Antlr4,我在ANTLR4中为C#目标定义了一个简单规则,如下所示: numberliteral: NUMBER; NUMBER : '-'? INT '.' INT EXP? // 1.35, 1.35E-9, 0.3, -4.5 | '-'? INT EXP // 1e10 -3e4 | '-'? INT // -4 12

我在ANTLR4中为C#目标定义了一个简单规则,如下所示:

    numberliteral: NUMBER;
    NUMBER    :   '-'? INT '.' INT EXP?   // 1.35, 1.35E-9, 0.3, -4.5
                 |   '-'? INT EXP            // 1e10 -3e4
                 |   '-'? INT                // -4 12
                 ;
    fragment INT :   [0] | [1-9] [0-9]* ; // no leading zeros
    fragment EXP :   [Ee] [+\-]? INT ; // \- since - means "range" inside [...]
结果很奇怪:

  • 在数量上满足第一个备选方案的任何东西都是好的,例如1.2、1.2e+1、-1.2
  • 如果数字前面有“-”符号,则仅数字的其他两个备选方案有效,例如-1e+2或-2。它不识别正数,如:2或2e+3
  • 有人知道这里出了什么问题吗

    感谢您(在AntlWorks NetBeans插件中)确实为我工作了:

    语法:

    grammar simpleGrammar;
    
    start: numberliteral*;
    
    
    numberliteral: NUMBER;
    NUMBER    :   '-'? INT '.' INT EXP?   // 1.35, 1.35E-9, 0.3, -4.5
                 |   '-'? INT EXP            // 1e10 -3e4
                 |   '-'? INT                // -4 12
                 ;
    fragment INT :   [0] | [1-9] [0-9]* ; // no leading zeros
    fragment EXP :   [Ee] [+\-]? INT ; // \- since - means "range" inside [...]
    
    
    WS : [ \t\n\r] -> skip;
    
    样本:

    1.35
    1.35E-9
    0.3
    -4.5
    1e10
    -3e4
    -4
    12
    
    结果:

    您如何知道它“无法识别”正数?你能附上一份完整的语法吗?