2016-12-05 16 views
0

私はいくつかの文字列演算子をサポートする必要があるflex-bisonプロジェクトを持っています。演算子 '^'は文字列を逆にすることを意味し、演算子[i]は文字列中のインデックスiを返します。 正しい入力と出力の例を示します。その後、バイソンの演算子優先度

input : ^"abc"[0]  ---> correct output: "c", my output: "a" 

私は(「CBA」)、それを逆にする最初のためだと0インデックス(「CBA」は[0] Cである)を取ります。 今、私はその優先順位を行う方法がわからないので、 "abc" [0] - > "a"を取ってから逆に "a"を取るので、コードは "a"を出力します。今の私のバイソンファイルには、

%left STR MINI 
%left '^'   
substring: 

STR MINI   { //THIS IS DONE FIRST, SUBSTRING  
        $$ = substringFind($1,$2,$2,temp); 
        } 
| '^' substring { //BUT I WANT THIS (REVERSING) TO BE FIRST  
        $$ = reverseStrings($2,temp); 
        } 
; 

どのようにその優先順位を変更できますか?私は実際に優先順位のルールを理解していない、複数(*)の前にプラス(+)で非常に簡単だったが、それらの演算子で私はそれを扱う方法を本当に知らない。 すべてのヘルプ...?

+0

を。 MINIとは何ですか? – EJP

+0

MINIは "abc" [0]のようなインデックスです。私は0としてminiを取得します。私は2を分離する方法を理解していません。 – mooly

+0

@EJP: 'substring:STR |部分文字列MINI | '^' substring'と優先順位宣言。解決する競合がないため、優先順位の宣言はOPで機能しません。 (私は優先順位宣言のないバージョンも好きですが)+ – rici

答えて

1

あなたは、何か同じ生産内の別の作品ではなく、交互に必要があります:あなたは同じ生産内の別の作品ではなく、交互に必要

string 
    : substring 
    ; 

substring 
    : reverse MINI { ... } 
    | reverse 
    ; 

reverse 
    : "^" reverse { ... } 
    | STR 
    ; 
+0

私はまだそれを得ることはできません、あなたの "逆"はSTRを得ることができますが、ここで私はSTR MINIを持っています。いつ "逆転"してSTRになるのでしょうか? – mooly

+1

「部分文字列:逆MINI」および「逆:STR」を介して。 – EJP