ANTLR4具有简单规则的奇怪行为
我在ANTLR4中为C#目标定义了一个简单规则,如下所示: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
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 [...]
结果很奇怪:
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
结果:
您如何知道它“无法识别”正数?你能附上一份完整的语法吗?