我的语法中有这个表达式:
function_expr (('*'|'/'|'%') multiplicative_expression)*
我试图在AST中形成它,但是使用'|'符号我不知道该怎么做。我想做这样的事情:
function_expr (('*'|'/'|'%') multiplicative_expression)* -> ^('*' ^(FUNC_EXPR function_expr) multiplicative_expression)
当然不正确。最好的方法是:
function_expr (('*'^|'/'^|'%'^) multiplicative_expression)*
不幸的是,我还需要定义一些令牌。 有人有想法吗?
答案 0 :(得分: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)
)*
;