Flex和Bison Parser,两个令牌的相同字符

时间:2019-02-24 19:18:45

标签: bison flex-lexer

我正在与Bison和Flex进行小型解析器学习。

我有问题,我希望能够将二进制OR运算符设置为

exp || exp

其中字符“ |”两次表示两个表达式的“或”运算,一个在左边,一个在右边。

但是我也希望能够将绝对值定义为

| exp |

其中字符“ |”像括号一样使用,表示其中的表达式的绝对值。

现在我遇到了解析器无法正确解析诸如

之类的字符串的麻烦

||exp| + exp|

我想解析为

(| (|exp|) + (exp) |)

表示一个表达式的绝对值加上另一个表达式的绝对值。

在这里,我的解析器然后以OR的形式读取前两个管道字符,然后发现其余的错误,这是有道理的,但不是我想要的。

我尝试给野牛文件中的规则赋予不同的优先级,并尝试使flex不能识别双管道,而一次只能识别一个管道,但是我都不熟悉100%确定我正在做的事情的影响。

到目前为止,我发现的唯一解决方案是在OR运算符的两边都强制使用空格字符,该运算符可以工作但并不美观。我也可以在其中一个操作中使用另一个字符,但我想至少要稍事固执,我认为这里有一些需要学习的东西。

感谢您阅读我的问题,希望有人对解决方案有所了解

欢呼

0 个答案:

没有答案