Правило лексера ANTLR использует символы, даже если они не совпадают?

У меня появился странный побочный эффект правила лексера 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');
5
задан Lichtblitz 13 April 2012 в 06:40
поделиться