向量添加参数(Yacc / Bison)

时间:2012-04-09 22:45:57

标签: compiler-construction bison yacc

我想在Yacc / Bison中向表示参数列表的向量添加对象。我有以下语法规则:

argument_list:  expression 
                {
                 //push back object representing expression onto arglist vector
                }

                |
                expression ',' argument_list
                {
                 //same here
                };

我不知道如何解决这个问题,因为你不能将argument_list声明为类型声明中的向量。我想将此向量传递给一个方法,该方法通过如下规则创建表示方法的AST节点:

arg_method_invocation: IDENT PERIOD IDENT LPAR argument_list RPAR 
              { 
              $$=new MethodCallStatement(yylineno,new MethodCallExpression(yylineno,$1,$3, $5 ));
                     if ($$==NULL)
                     fatal("method stmt: ", "error method stmt call");
              }

这甚至可能吗?我是编译器设计的新手,这种方法可能无法实现。欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

让它左递归:

argument_list:  expression 
            {
              $$ = new vector();
              $$.add($1); // or whatever the API is
            }

            |
            argument_list ',' expression
            {
             $1.add($3); // ditto
            };

我不明白为什么你不能将argument_list声明为vector。我假设你指的是%type和%union指令?如果你不是,你就是这样做的。