Por que o ANTLR não analisa toda a entrada?
-
24-09-2019 - |
Pergunta
Eu sou muito novo no ANTLR, então essa é provavelmente uma pergunta simples.
Eu defini uma gramática simples que deveria incluir expressões aritméticas com números e identificadores (strings que começam com uma carta e continuam com uma ou mais letras ou números.)
A gramática parece o seguinte:
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; };
Estou usando o ANTLR V3 com o plug -in Antlr IDE Eclipse. Quando eu analiso a expressão (8 + a45)
Usando o intérprete, apenas parte da árvore de análise é gerada:
Por que o segundo termo (A45) não é analisado? O mesmo acontece se ambos os termos forem números.
Obrigada,
Martin Wiboe
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow