我正在使用 C/C++ 在 Bison & Flex 中编写一个简单的计算器(逻辑在 Bison 中完成,C/C++ 部分负责数据结构,例如 STL 等)。
我有以下问题:
在我的计算器中,美元符号$
表示 i++ 和 ++i(前缀和后缀),例如:
int y = 3;
-> $y = 4
-> y$ = 4
当用户点击:int_expression1 && int_expression2
,如果int_expression1
被评估为0
(即假),那么我不想野牛评估int_expression2
!
例如 :
int a = 0 ;
int x = 2 ;
用户点击:int z = a&&x$
...
因此,变量a
被评估为0
,因此,我不想评估x
,但它仍然增长 1 ...这是野牛/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;
}
如果第一个表达式已经被评估为假(即),我怎么能告诉野牛不要评估第二个表达式0
?