2012-04-09 6 views
0

Yacc/Bisonの引数リストを表すベクトルにオブジェクトを追加したいと思います。ベクトルへの引数の追加(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"); 
       } 

がこのさえ可能ですか?私はコンパイラの設計には新しく、このアプローチはできないかもしれません。どんな提案も大歓迎です。

答えて

0

ちょうどそれが左再帰ます

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

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

あなたはvectorとしてargument_list宣言することはできませんなぜ私は表示されません。ここで%typeと%unionディレクティブを参照しているとしますか?あなたがそうでないなら、それはあなたがそれをする方法です。

+0

型宣言の%unionと%type argument_listの型/共用体指示文vector myVecにベクトルを設定しようとしました。ルールでベクトルをコンパイルして使用しようとすると、「YYSTYPEにmyVecという名前のメンバがありません」というエラーが表示されます。何がありますか? – Leif

+0

@Leif YYSTYPEの宣言で*は何ですか? – EJP

関連する問題