我有一个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