演算子の優先順位がない文法を作成しようとしていますが、1つの演算子を使用するか、括弧で囲む必要があります。(簡単にするために、ここでは有効な演算子のリストの代わりに、および代わりにtest
使用id|int_literal etc
します)。+
したがって、たとえば:
test + test ///valid!
(test + test) + test ///valid!
(test + test) + (test + test) /// valid!
test + test + test /// invalid!
backtrack = trueを必要としないこのための文法を書く方法はありますか?ここでは左再帰が実際には意味をなさないと思います。構文述語がどのように役立つかはわかりません。
これが私が持っているものです(必須backtrack=true
):
fragment
bexpr : 'test' | '(' cbebr ')';
fragment
cbexpr : bexpr '+' bexpr;
expr : bexpr | cbexpr;