野牛中的运算符优先级
operator precedence in bison
我有一个 flex-bison 项目,其中我需要支持一些字符串运算符,运算符 '^' 表示反转字符串,运算符 [i] 表示 return 字符串中的索引 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(,,,temp);
}
| '^' substring { //BUT I WANT THIS (REVERSING) TO BE FIRST
$$ = reverseStrings(,temp);
}
;
如何更改该优先级?我不太了解优先规则,在多个 (*) 之前使用加号 (+) 非常容易,但是对于那些运算符我真的不知道如何使用它。
有什么帮助...?
您需要单独的作品,而不是同一作品中的交替作品,例如:
string
: substring
;
substring
: reverse MINI { ... }
| reverse
;
reverse
: "^" reverse { ... }
| STR
;
我有一个 flex-bison 项目,其中我需要支持一些字符串运算符,运算符 '^' 表示反转字符串,运算符 [i] 表示 return 字符串中的索引 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(,,,temp);
}
| '^' substring { //BUT I WANT THIS (REVERSING) TO BE FIRST
$$ = reverseStrings(,temp);
}
;
如何更改该优先级?我不太了解优先规则,在多个 (*) 之前使用加号 (+) 非常容易,但是对于那些运算符我真的不知道如何使用它。 有什么帮助...?
您需要单独的作品,而不是同一作品中的交替作品,例如:
string
: substring
;
substring
: reverse MINI { ... }
| reverse
;
reverse
: "^" reverse { ... }
| STR
;