我正在与Bison和Flex进行小型解析器学习。
我有问题,我希望能够将二进制OR运算符设置为
exp || exp
其中字符“ |”两次表示两个表达式的“或”运算,一个在左边,一个在右边。
但是我也希望能够将绝对值定义为
| exp |
其中字符“ |”像括号一样使用,表示其中的表达式的绝对值。
现在我遇到了解析器无法正确解析诸如
之类的字符串的麻烦 ||exp| + exp|
我想解析为
(| (|exp|) + (exp) |)
表示一个表达式的绝对值加上另一个表达式的绝对值。
在这里,我的解析器然后以OR的形式读取前两个管道字符,然后发现其余的错误,这是有道理的,但不是我想要的。
我尝试给野牛文件中的规则赋予不同的优先级,并尝试使flex不能识别双管道,而一次只能识别一个管道,但是我都不熟悉100%确定我正在做的事情的影响。
到目前为止,我发现的唯一解决方案是在OR运算符的两边都强制使用空格字符,该运算符可以工作但并不美观。我也可以在其中一个操作中使用另一个字符,但我想至少要稍事固执,我认为这里有一些需要学习的东西。
感谢您阅读我的问题,希望有人对解决方案有所了解
欢呼