ANTLR4奇怪的行为与一个简单的规则

时间:2014-07-21 21:39:23

标签: 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
                 ;
    fragment INT :   [0] | [1-9] [0-9]* ; // no leading zeros
    fragment EXP :   [Ee] [+\-]? INT ; // \- since - means "range" inside [...]

结果很奇怪:

  1. 在NUMBER中完成第一个选择的任何内容都很好,例如1.2,1.2e + 1,-1.2
  2. NUMBER的另外两个替代方案只有在有' - '在号码前签名,例如-1e + 2或-2。它不识别正数,如:2或2e + 3
  3. 任何人都知道这里出了什么问题?

    由于

1 个答案:

答案 0 :(得分:0)

对我有用(在Antlrworks 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

结果:

parse result