【发布时间】:2016-09-13 21:31:32
【问题描述】:
我的 ANTLR v4 语法摘录如下所示:
expression:
| expression BINARY_OPERATOR expression
| unaryExpression
| nularExpression
;
unaryExpression:
ID expression
;
nularExpression:
ID
| NUMBER
| STRING
;
我的目标是在不知道所有必要关键字的情况下匹配语言,因此我只是将关键字作为 ID 进行匹配。
但是,有些二元运算符在关键字的两边都带有参数(例如关键字),因此它们需要“特殊处理”。如您所见,我已经在expression 规则中包含了这种“特殊处理”。
现在的实际问题在于,其中一些二元运算符可以用作一元运算符(=普通关键字),这意味着不必指定左参数。
上面的语法不能解决这种情况,因为每次我尝试实现它时,我最终都会将每个二元运算符都用作一元运算符。
示例:
假设count 是一个二元运算符。
可能的语法是<arg1> count <arg2> 和count <arg>
我实现上述案例的所有尝试最终都将myArgument count otherArgument 分组为(myArgument (count (otherArgument) ) ) 而不是(myArgument) count (otherArgument)
我的大脑告诉我,这个问题的解决方案是告诉解析器始终为二元运算符获取两个参数,如果失败,它应该尝试将二元运算符作为一元运算符来使用。
有谁知道如何做到这一点?
【问题讨论】:
标签: parsing antlr4 operator-precedence