このmsdnリンクは、「(」および「)」が左から右への結合性を持っていることを示しています。
それはどのように意味がありますか?誰かが私に例を教えてもらえますか?
正式な文法では、左から右への優先順位を持つ演算子は左再帰的です。したがって、バイナリ加算では:
S -> E
E -> E + a
E -> a
したがって、ツリーは次のようになります。
S
|
E
|
E + a
|
E + a
|
a
ご覧のとおり、最初の 2 つa
の が 2 番目の 2 つの前に追加されています。
右結合演算子の場合、文法には右再帰が含まれます。したがって、2 進累乗では次のようになります。
S -> E
E -> a ** E
E -> a
その後、解析ツリーは次のようになります。
S
|
E
|
a ** E
|
a ** E
|
a
ご覧のとおり、最後の 2 つa
の は最初にべき乗され、その結果は最初の累乗になりa
ます (ちなみに、これは累乗の適切な結合性です)。
三項以上の演算子の場合、同じパターンが適用されます。再帰規則は、左端の非終端記号または右端の非終端記号のいずれかです。ただし、単項演算子の場合、左再帰であるか右再帰であるかは、非終端記号がそれぞれ左または右にあるかどうかによって異なります。いずれ(
E
)
かの側に終端があり、非終端は再帰的ですが、文法的な観点からは左再帰でも右再帰でもないため、MSDN の記事で恣意的に「左から右」と宣言されていると思います。 "
括弧の結合性は、inのd
前に評価されるという事実には関係がなく、 in の結合性にも関係がないため、他の Jared が何について話しているのかわかりません。a+b+c
d+(a+b+c)
a+b+c
何が不明ですか?(
あなたが持っているときはいつでも、彼らはペアになります)
。それらの中に入ると、左から右に算術演算をd+(a+b+c)
行うので、そうする場合a+b
は、追加された合計、次にa+b
追加されc
た合計a,b,c
d