我有一个flex-bison项目,我需要支持一些字符串运算符,运算符'^'表示反转一个字符串,operator [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);
}
;
如何更改优先顺序?我不太了解优先级规则,在多个(*)之前使用加号(+)非常容易,但是对于那些运算符我真的不知道如何使用它。 任何帮助......?
答案 0 :(得分:1)
您需要单独制作,而不是在同一制作中替代,例如:
string
: substring
;
substring
: reverse MINI { ... }
| reverse
;
reverse
: "^" reverse { ... }
| STR
;