ANTLR 2.7 を使用して文法を作成し、次のような単純な式を解析します。
1
2%
(3%)
(4)
((5))
((6%))
括弧とオプションのパーセント文字を使用できる単純な数値です
私の文法は次のようになります。
class MyParser extends Parser;
options {
k=2;
buildAST = true;
}
parexpr
: variable
| LPAREN^ parexpr RPAREN!
;
variable
: (NUMBER PCT) => NUMBER PCT^
| NUMBER
;
class MyLexer extends Lexer;
options {
k=6;
}
LPAREN: '(';
RPAREN: ')';
DOT: '.';
PCT: '%';
protected
DIGIT: '0'..'9';
NUMBER: (DIGIT)+ (DOT (DIGIT)+)*;
たとえば、正常に解析できます
(1)
(2%)
しかし、単一の数値の解析に失敗します:
1
| LPAREN^ parexpr RPAREN!
どちらかを削除すると、または: (NUMBER PCT) => NUMBER PCT^
1 つの数値を解析できます (ただし、他の式は明らかにできません)。
この文法で単一の数値を解析できない理由がわかりません..?
私はずっと前にこのバージョンで実装されたプロジェクトに取り組んでおり、既存のものを拡張しているだけであることに注意してください。