私はC/C ++を使用してBison&Flexで簡単な計算機をプログラミングしています(ロジックはBisonで行われ、C / C ++部分はSTLなどのデータ構造を担当します)。
私は次の問題を抱えています:
私の計算機では、ドル記号$
はi++と++i(接頭辞と接尾辞の両方)を意味します。例:
int y = 3;
-> $y = 4
-> y$ = 4
ユーザーが:をヒットしたとき、が評価されたint_expression1 && int_expression2
場合(つまり、false)、私は評価するためにバイソンになりたくありません!int_expression1
0
int_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
ですか?