3

質問するのはとても恥ずかしいです... intからboolへ、またはその逆に型キャストする言語の文法を書きました。

logic_expr : expr NOT? OR | AND expr
       | expr '|' expr SMALLER | LARGER
       | NUMBER
       | NUMBER_SHORT
       | IDENT
       | LOGIC_DEFINED
       ;
math_expr : expr ADD | SUB expr
      | NUMBER
      | NUMBER_SHORT
      | IDENT
      | LOGIC_FULL
      ;
expr : logic_expr
     | math_expr
     | IDENT
     | LOGIC_DEFINED
     | '(' expr ')'
     ;

しかし、antlr は、「次の一連のルールは相互に左再帰的です [logic_expr、expr、math_expr]」と教えてくれます。

4

1 に答える 1

4

ANTLR 4.2.2 の時点で、ANTLR 4 は現在、間接左再帰を含む文法をサポートしていません。この制限はissue #522で対処されており、ANTLR 4.3 に組み込まれることを願っています。

ANTLR 4 はすでに直接logic_expr左再帰をサポートしているため、 andmath_exprルールをインライン化することでこの問題を解決できます。また、省略した括弧を追加して、3 つの壊れた代替案を編集しました。元のルールにあったあいまいさを取り除きませんでした。

expr
       : expr NOT? (OR | AND) expr
       | expr '|' expr (SMALLER | LARGER)
       | NUMBER
       | NUMBER_SHORT
       | IDENT
       | LOGIC_DEFINED
       | expr (ADD | SUB) expr
       | NUMBER
       | NUMBER_SHORT
       | IDENT
       | LOGIC_FULL
       | IDENT
       | LOGIC_DEFINED
       | '(' expr ')'
       ;
于 2014-04-10T21:17:06.050 に答える