控制参数滑动

时间:2015-05-02 11:03:33

标签: antlr antlr4

我试图在不使用括号的情况下编写支持函数调用的语法:

f x, y

就像在Haskell中一样,我喜欢函数调用来最小化他们的参数。也就是说,我想要

g 5 + 3

表示

(g 5) + 3

而不是

g (5 + 3)

不幸的是,我用这个语法得到了第二个解析:

grammar Parameters;

expr
  : '(' expr ')'
  | expr MULTIPLICATIVE_OPERATOR expr
  | expr ADDITIVE_OPERATOR expr
  | ID (expr (',' expr)*?)??
  | INT
  ;

MULTIPLICATIVE_OPERATOR: [*/%];
ADDITIVE_OPERATOR: '+';

ID: [a..z]+;
INT: '-'? [0-9]+;
WHITESPACE: [ \t\n\r]+ -> skip;

我得到的解析树是:

Not the parse tree I want

我原以为首先列出的子规则会先尝试。在这种情况下,expr ADDITIVE_OPERATOR expr出现在ID子规则之前,为什么ID子规则优先级更高?

0 个答案:

没有答案