私はC/C ++を使用してBison&Flexで簡単な計算機をプログラミングしています(ロジックはBisonで行われ、C / C ++部分はSTLなどのデータ構造を担当します)。
私は次の問題を抱えています:
私の計算機では、ドル記号$はi++と++i(接頭辞と接尾辞の両方)を意味します。例:
int y = 3;
-> $y = 4
-> y$ = 4
ユーザーが:をヒットしたとき、が評価されたint_expression1 && int_expression2場合(つまり、false)、私は評価するためにバイソンになりたくありません!int_expression10int_expression2
例えば :
int a = 0 ; 
int x = 2 ;
そして、ユーザーがヒットします:int z = a&&x$..。
したがって、変数aはに評価されます0。したがって、評価したくありませんがx、それでも1ずつ増加します...これがbison /c++のコードです。
%union
{
    int int_value;
    double double_value;
    char* string_value;
}
%type <int_value> int_expr
%type <double_value> double_expr
%type <double_value> cmp_expr
int_expr:
    | int_expr '&&' int_expr    { /* And operation between two integers */
                      if ($1 == 0) 
                        $$ = 0;
                      else  // calc
                        $$ = $1 && $3;          
                    }
最初の式がすでにfalse(つまり)と評価されている場合、2番目の式を評価しないようにbisonに指示するにはどうすればよい0ですか?