[英]Logical expression Grammar in Flex and bison
我正在為flex和bison編寫邏輯表達式的簡單語法。 該表達式是一個后綴表達式。 這是我的yacc代碼。
float_logic_expr:
float_logic_expr
| float_logic_exprs
;
float_logic_exprs:
float_reln_expr
| float_reln_expr float_reln_expr PP_AND
| float_reln_expr float_reln_expr PP_OR
;
string_logic_expr:
string_reln_expr
| string_reln_expr string_reln_expr PP_AND
| string_reln_expr string_reln_expr PP_OR
;
上面的規則適用於下面的語句。
if #a 40 > #b 20 == && then
但是,如果我再給邏輯表達式一個條件,它將失敗。
if #a 40 > #b 20 == && #b 30 == && then
解析錯誤。
我應如何更改語法以使其適用於多個關系表達?
它正在執行您指示的操作,不是嗎?
float_logic_exprs
: float_reln_expr
| float_reln_expr float_reln_expr PP_AND
| float_reln_expr float_reln_expr PP_OR
;
也就是說,邏輯表達式是單個關系表達式或兩個(精確)關系表達式,后跟AND
或OR
標記。 但是您提供的示例表明,您期望邏輯表達式能夠將另一個邏輯表達式作為參數,而不僅僅是關系表達式。
另外,這是沒有意義的:
float_logic_expr:
float_logic_expr
| float_logic_exprs
;
由於生產float_logic_expr: float_logic_expr
永遠不會有用(它必須觸發某種野牛警告)。
所有這些都建議您要:
float_logic_expr
: float_reln_expr
| float_logic_expr float_logic_expr PP_AND
| float_logic_expr float_logic_expr PP_OR
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.