如何用|转换表达式(或)在AST?

时间:2013-04-04 20:34:45

标签: c tree antlr grammar multiplication

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

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

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

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

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

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

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

1 个答案:

答案 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)
                 )* 
 ;