2
私はexpression
を持っています。これは他のトップレベルのもののコレクションです。 expression
にはmath
があり、それはexpression (op) expression
です。これで、私はルールのAntlrでいつ/何故相互左回帰が起こるのですか?
次のセットは、相互に左再帰[表現、数学】しかし
compileUnit : expression EOF;
expression
: parens
| operation
| math
| variable
| number
| comparisonGroup
;
math : expression op=(ADD | SUBSTRACT | MULTIPLY | DIVIDE) expression #mathExpression;
あります!
これはされていないproblem-
expression
: parens
| operation
| expression op=(ADD | SUBSTRACT | MULTIPLY | DIVIDE) expression
| variable
| number
| comparisonGroup
;
をどちらもこれがある - !
math : op=(ADD | SUBSTRACT | MULTIPLY | DIVIDE) expression expression #mathExpression;
、なぜそれが私の最初のコードブロックは、他の2つの例とは異なる挙動するのですか?
最初の例は直接左回帰を示していませんが、これも問題になりますか?私はTDARを持っていないが、私はそれを取得しなければならないかもしれない。 –
Antlr4は再帰が「左端の*自体を呼び出す」という直接的な左回帰を扱うことができます。 'math'ルールは、左端の*別の*ルールを参照しているので、間接的な左回帰を作成します。 TDARを強くお勧めします。 – GRosenberg
https://youtu.be/q8p1voEiu8Q?t=38m32sを見ました。私は "それはちょうど今のところそれです"と大丈夫です。うまくいけば、TDARを読んだ後で、すべてのことが*どのように働くのかを理解するでしょう。 ありがとうございます。 –