1

我的语法中有这个表达式:

 function_expr  (('*'|'/'|'%') multiplicative_expression)*

我正在尝试在 AST 中形成它,但是使用“|” 符号我不知道该怎么做。我正在尝试做这样的事情:

 function_expr  (('*'|'/'|'%') multiplicative_expression)* -> ^('*' ^(FUNC_EXPR function_expr) multiplicative_expression)

当然是不正确的。最好的方法是:

 function_expr  (('*'^|'/'^|'%'^) multiplicative_expression)*

不幸的是,我还需要定义一些令牌。请问有人有想法吗?

4

1 回答 1

2

试试这个:

your_rule
 : (function_expr                                -> ^(FUNC_EXPR function_expr))
                 ( '*' multiplicative_expression -> ^('*' $your_rule multiplicative_expression)
                 | '/' multiplicative_expression -> ^('/' $your_rule multiplicative_expression)
                 | '%' multiplicative_expression -> ^('%' $your_rule multiplicative_expression)
                 )* 
 ;
于 2013-04-04T20:48:47.040 回答