我正在使用C/C++編寫一個簡單的計算器Bison & Flex(該邏輯在Bison中完成,C/C++部分負責數據結構,例如STL等)。在Bison中爲&&和||啓動短路規則操作
我有以下問題:
在我的計算器美元符號$
意味着我++和++我(前綴和後綴),例如:
int y = 3;
-> $y = 4
-> y$ = 4
當用戶點擊:int_expression1 && int_expression2
,如果int_expression1
進行評估,以0
(即假),那麼我不wan't野牛評估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
)?
我不明白最後的codelines句子可以將它們翻譯成C嗎? –
@AlbertoBonsanto:它們在'Bison'中,意思是'$$'是整條線的結果。'$ 1'代表左邊的'int_expr','$ 3'代表右邊的'int_expr' ... – ron
我重複了這個;因爲它與Adobe/Apache框架無關。 gnu-flex和/或lex通常用於詞法分析器。 – JeffryHouser