私はANTLRにまったく慣れていないので、これはおそらく簡単な質問です。
数字と識別子(文字で始まり、1つ以上の文字または数字で続く文字列)を含む算術式を含むことになっている単純な文法を定義しました。
文法は次のようになります。
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; };
ANTLRIDEEclipseプラグインでANTLRv3を使用しています。インタープリターを使用して式を解析する(8 + a45)
と、解析ツリーの一部のみが生成されます。
2番目の項(a45)が解析されないのはなぜですか?両方の用語が数字の場合も同じことが起こります。