2012-04-09 2 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"); 
       } 

이 경우조차도 가능합니까? 컴파일러 디자인에 익숙하지 않아이 접근법이 불가능할 수도 있습니다. 어떤 제안이라도 환영합니다. 당신이 vectorargument_list를 선언 할 수없는 이유

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

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

내가 볼 수 없습니다 :

답변

0

그냥 왼쪽 재귀합니다. 여기에 % type 및 % union 지시문을 언급한다고 가정합니다. 그렇지 않다면 그렇게하는 것입니다.

+0

타입 조합 선언문에 벡터를 설정하려고 시도했습니다. 벡터 선언문은 % union의 vector myVec과 타입 선언의 % type argument_list입니다. 규칙에서 벡터를 컴파일하고 사용할 때 "YYSTYPE에 myVec라는 멤버가 없습니다"라는 오류가 발생합니다. 뭐라 구요? – Leif

+0

@Leif YYSTYPE 선언에 * 무엇입니까? – EJP