Я не вижу, как справиться с ошибкой грамматики ANTLR:
****************error message*********
Decision can match input such as "{'+', '-'} IDENT" using multiple alternatives: 1, 2
As a result, alternative(s) 2 were disabled for that input
|---> add: mult (('+'|'-') mult)*;
***************************************
Это в основном скопировано с примера Скотта, но я не вижу, почему его работа работает хорошо, но моя застряла икак из этого выбраться?
--------------- следующий образец.g ----------------
grammar Sample;
options {
language = Java;
}
program
: 'program' IDENT '='
(constant| variable)*
'begin'
(statement)*
'end' IDENT '.'
;
constant:
'constant' IDENT ':' type ':=' expression ';'
;
type: 'integer';
variable: 'var' IDENT (',' IDENT)* ':' type ';';
statement: 'var' IDENT ':=' INTEGER ';' ;
//expression
term: IDENT |'(' expression ')'|INTEGER;
negation: 'not'* term;
unary: ('+'|'-')* negation;
mult: unary (('*'|'/'|'mod') unary)*;
[XXX Ошибка для следующей строки]
add: mult (('+'|'-') mult)*;
relation: add (('='|'/='|'<'|'<=') add)*;
expression: (relation ('and'|'or') relation)*;
END : 'end';
CONSTANT : 'constant';
INTEGER: '0'| (('1'..'9') ('0'..'9')*);
IDENT: ('a'..'z'|'A'..'Z')('a'..'z'|'A'..'Z'|'0'..'9')*;
WS: ('\n'|' '|'\t'|'r'|'\f')+ {$channel=HIDDEN;};