-1

こんにちは、単純な後置電卓を作成しようとしています。

以下はスニペットです:

    %token NUM
    %left '-' '+'
    %left '*' '/'
    %left NEG     /* negation--unary minus */
    %right '^'    /* exponentiation        */

         %% /* Grammar rules and actions follow.  */


    input:
           /* empty */
         | input line
         ;

         line:
           '\n'
         | exp '\n'      { printf ("%.10g\n", $1); }
         ;

         exp:
           NUM           { $$ = $1;           }

         | '-' exp  %prec NEG { $$ = -$2;     }
         | exp exp '+'   { $$ = $1 + $2;      }
         | exp exp '-'   { $$ = $1 - $2;      }
         | exp exp '*'   { $$ = $1 * $2;      }
         | exp exp '/'   { $$ = $1 / $2;      }
         | exp exp '^'   { $$ = pow ($1, $2); }  /* Exponentiation */
         | exp 'n'       { $$ = -$1;          }  /* Unary minus    */
         ;
         %%

   1 2 + 3 -      =>                   0 \n
        1 -2 -      =>                 3 \n
        2 3e+2 + 3 -      =>          299 \n
        1 2 3 + -           =>         -4 \n

のみ、1 +2 - => :SYNTAX ERROR!! これはなぜですか?私は何をすべきか ?単項 + 演算子を作成しようとしましたが、意味がありません。

4

1 に答える 1

1

符号付き数値を直接数値として認識するように、字句解析プログラムをアップグレードする必要があります。'-' expその場合、、または%left NEG優先順位行の特別なルールは必要ありません。

于 2012-12-17T03:39:54.593 に答える