プログラミング言語クラスでは、演算子の優先順位と結合性を学びました。下には、上記の文脈自由文法を使用することにより文脈自由文法プログラミング言語の演算子優先度
<expr> -> <expr> + <term> | <term>
<term> -> <term> * <fact> | <fact>
<fact> -> (<expr>) | a
シンプルで、我々は
a+a+(a+a)
は、私が思うの文を作ることができ、操作の順序は次のように行われるべきです次のようにしてください:(a + a) - > a + a、次にプラス。しかし、講義では、教授は(a + a) - > a + aと a + a - >(a + a)の順序が正しいと言いました。学生は慌てている。でも以下の文章では、
(a+a)+((a+a))
両方の順序が((A + A)) - >(A + A)をプラスと(A + A) - >((A + A))が正しいです。 彼は、構文解析ツリーを作成した後、アセンブリ言語 に変換したので、順序はコンパイラによって異なります。
私は彼の説明を理解していません。 誰かがなぜ2つの可能な順序があるのか説明できますか?
与えられた文法はあいまいであることに注意してください。 ' + 'はおそらく ' * 'であるべきです。 –
@MichaelDyckが正しい。私のタイプミス –