3

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 つの数値を解析できます (ただし、他の式は明らかにできません)。

この文法で単一の数値を解析できない理由がわかりません..?

私はずっと前にこのバージョンで実装されたプロジェクトに取り組んでおり、既存のものを拡張しているだけであることに注意してください。

4

0 に答える 0