ANTLR:区分一元和二元运算符的问题(例如减号)
我正在使用 ANTLR (3.2) 来解析一些相当简单的语法。不幸的是,我遇到了一个小问题。采用以下规则:
exp
: NUM
| '(' expression OPERATOR expression ')' -> expression+
| '(' (MINUS | '!') expression ')' -> expression
;
OPERATOR 包含与 MINUS 定义相同的减号 ('-')。现在ANTLR似乎无法处理这两个规则。如果我删除其中任何一个,一切都会正常。
有人有想法吗?
i'm using ANTLR (3.2) to parse some rather simple grammar. Unfortunately, I came across a little problem. Take the follwoing rule:
exp
: NUM
| '(' expression OPERATOR expression ')' -> expression+
| '(' (MINUS | '!') expression ')' -> expression
;
OPERATOR contains the same minus sign ('-') as is defined with MINUS. Now ANTLR seems to be unable to deal with these two rules. If I remove either one, everything works fine.
Anyone ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使一元表达式成为具有最高优先级的表达式。我还会对一元
-
使用不同的标记,以便更好地区分减号。演示:对源代码的快速测试:
生成以下 AST:
Make the unary expression the one with the highest precedence. I'd also use a different token for the unary
-
to make the distinction between the minus better. A demo:A quick test with the source:
produced the following AST: