我有一個flex-bison項目,我需要支持一些字符串運算符,而運算符'^'表示反轉字符串,而運算符[i]表示在字符串中返回索引i。 正確的輸入和輸出,例如:運算符優先於野牛
input : ^"abc"[0] ---> correct output: "c", my output: "a"
這是因爲第一欲逆轉它(「CBA」),然後取0的索引(「CBA」 [0]爲c)。 現在,我不知道如何做這個優先級,所以我的代碼輸出「a」,因爲它首先需要「abc」[0] - >「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);
}
;
我該如何改變這種優先順序?我並不十分了解優先規則,在多個(*)之前用plus(+)很容易,但對於那些運營商而言,我真的不知道如何使用它。 任何幫助...?
你需要單獨製作,同樣的生產中沒有交替。什麼是MINI? – EJP
MINI是索引,在「abc」中說[0]我把mini看作是0.我不明白如何分開這個2 – mooly
@EJP:你可以寫'substring:STR |子串MINI | '^'子串'以及優先聲明。優先權聲明在OP中不起作用,因爲不存在解決衝突。 (雖然我更喜歡沒有優先聲明的版本)。+ – rici