0

次のような文法がある場合:

<assign> → <id> = <expr> 
<id> → A | B | C 
<expr> → <expr> + <term> 
         |  <term> 
<term> → <term> * <factor> 
         |  <factor> 
<factor> → ( <expr> ) 
          | <id>

そして、文 A = B + C * A から、この左端の導出が得られます。

<assign> => <id> = <expr> 
         => A = <expr> 
         => A = <expr> + <term> 
         => A = <term> + <term> 
         => A = <factor> + <term> 
         => A = <id> + <term> 
         => A = B + <term> 
         => A = B + <term> * <factor> 
         => A = B + <factor> * <factor> 
         => A = B + <id> * <factor> 
         => A = B + C * <factor> 
         => A = B + C * <id> 
         => A = B + C * A

しかし、A = B + ( C * A ) はどうでしょうか?

4

2 に答える 2

2

A = B + ( C * A )?

上記と同じ最初の 5 つの手順、その後...

     => A = B + <term>  
     => A = B + <factor>    
     => A = B + ( <expr>) 
     => A = B + ( <term> )  
     => A = B + ( <term> * <factor> ) 
     => A = B + ( <factor> * <factor> ) 
     => A = B + ( <id> * <id> ) 
     => A = B + (  C   *   A  )
于 2010-09-24T20:07:28.370 に答える
0

( C * A )* の方が優先度が高いため、括弧は必要ありません。あなたがそれを見る1つのケースはA = B * ( C + B ).

は aまたは an の<factor>いずれかに eval されるため、最後の 2 行には表示されません。この場合、+ がないので、. でなければなりません。<term> + <term><id><id>

于 2010-09-24T20:05:02.620 に答える