【发布时间】:2012-04-25 13:14:20
【问题描述】:
我有一个 antlr 词法分析器规则的奇怪副作用,我创建了一个(几乎)最小的工作示例来演示它。
在这个例子中,我想匹配字符串 [0..1] 例如。但是当我调试语法时,到达解析器的令牌流只包含[..1]。第一个整数,无论它包含多少个数字,总是被消耗掉,我不知道这是怎么发生的。如果我删除 FLOAT 规则,一切都很好,所以我猜错误出在该规则的某个地方。但由于它根本不应该匹配 [0..1] 中的任何内容,我很困惑。
如果我有任何可能出错的地方,我会很高兴。这是我的例子:
grammar min;
options{
language = Java;
output = AST;
ASTLabelType=CommonTree;
backtrack = true;
}
tokens {
DECLARATION;
}
declaration : LBRACEVAR a=INTEGER DDOTS b=INTEGER RBRACEVAR -> ^(DECLARATION $a $b);
EXP : 'e' | 'E';
LBRACEVAR: '[';
RBRACEVAR: ']';
DOT: '.';
DDOTS: '..';
FLOAT
: INTEGER DOT POS_INTEGER
| INTEGER DOT POS_INTEGER EXP INTEGER
| INTEGER EXP INTEGER
;
INTEGER : POS_INTEGER | NEG_INTEGER;
fragment NEG_INTEGER : ('-') POS_INTEGER;
fragment POS_INTEGER : NUMBER+;
fragment NUMBER: ('0'..'9');
【问题讨论】:
标签: antlr antlr3 antlrworks