Я новичок в ANTLR, так что это, вероятно, простой вопрос.
Я определил простую грамматику, которая должна включать арифметические выражения с числами и идентификаторами (строки, начинающиеся с буквы и продолжающиеся одной или несколькими буквами или цифрами)
Грамматика выглядит следующим образом:
grammar while;
@lexer::header {
package ConFreeG;
}
@header {
package ConFreeG;
import ConFreeG.IR.*;
}
@parser::members {
}
arith:
term
| '(' arith ( '-' | '+' | '*' ) arith ')'
;
term returns [AExpr a]:
NUM
{
int n = Integer.parseInt($NUM.text);
a = new Num(n);
}
| IDENT
{
a = new Var($IDENT.text);
}
;
fragment LOWER : ('a'..'z');
fragment UPPER : ('A'..'Z');
fragment NONNULL : ('1'..'9');
fragment NUMBER : ('0' | NONNULL);
IDENT : ( LOWER | UPPER ) ( LOWER | UPPER | NUMBER )*;
NUM : '0' | NONNULL NUMBER*;
fragment NEWLINE:'\r'? '\n';
WHITESPACE : ( ' ' | '\t' | NEWLINE )+ { $channel=HIDDEN; };
Я использую ANTLR v3 с плагином ANTLR IDE Eclipse. Когда я анализирую выражение (8 + a45)
с помощью интерпретатора, генерируется только часть дерева разбора:
альтернативный текст http://i43.tinypic.com/or4idw.png
Почему второй член (a45) не анализируется? То же самое происходит, если оба термина являются числами.
Спасибо,
Мартин Вибо