簡體   English   中英

Flex和野牛中的邏輯表達式語法

[英]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                 
            ;

也就是說,邏輯表達式是單個關系表達式或兩個(精確)關系表達式,后跟ANDOR標記。 但是您提供的示例表明,您期望邏輯表達式能夠將另一個邏輯表達式作為參數,而不僅僅是關系表達式。

另外,這是沒有意義的:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM