2016-05-02 10 views
0

フレックスとバイソンの論理式のための簡単な文法を書いています。 式は後置式です。これは私の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 

しかし、論理式に条件をもう1つ与えると失敗します。

if #a 40 > #b 20 == && #b 30 == && then 

構文エラーです。

複数の関係式で動作するように文法を変更する必要はありますか?

答えて

0

あなたが言ったことはそうしていますか?論理式は、単一の関係式またはAND又はORトークンに続く2つ(正確に)関係式であることを言う

float_logic_exprs 
      : float_reln_expr 
      | float_reln_expr float_reln_expr PP_AND      
      | float_reln_expr float_reln_expr PP_OR     
      ; 

。しかし、あなたが提供する例では、論理式だけではなく、別の論理式を引数として取ることができると期待しています。

また、これは無意味です:生産float_logic_expr: float_logic_exprが今まで役立つことはできません

float_logic_expr: 
       float_logic_expr 
       | float_logic_exprs 
       ; 

ので(それはバイソン警告のいくつかの種類をトリガーする必要があります)。

すべてのことは、あなたがしたいことを示唆している必要があります。

float_logic_expr 
      : float_reln_expr 
      | float_logic_expr float_logic_expr PP_AND      
      | float_logic_expr float_logic_expr PP_OR     
      ; 
+0

VGを。私はANDとORが入力(浮動小数点数/文字列)の上のレベルで表示されるべきだと言います。それ以外の場合は、float式と文字列式を組み合わせることはできません。 – EJP

+0

@ejp:私は通常型付きの構文に対してお勧めしますが、私は疲れてしまいました。あなたはもちろんそうです。私は朝に書き直すかもしれない。 – rici