использование объединения в yacc для структур

Я немного запутался в том, как указать тип члена моей грамматики. Я хочу объявить prog и decls как ASTNode. Я собираюсь использовать эти элементы для добавления в список и т. д. Но yacc не может распознать их как ASTNode, и я получаю ошибки типа.

Здесь мои tIdent, tCharConst, tIntConstant имеют несколько типов, но как присвоить тип ASTNode моим членам.

%union{
  int ival;
  char cval;
  char *sval;
  struct ASTNode *nval;
}

%token <sval> tIdent
%token <cval> tCharConst
%token <ival> tIntConst

    prog          : decls ;
    decls         : /* empty */
                  | decls decl
                  ;

person iva123    schedule 27.12.2009    source источник


Ответы (1)


В самом начале вашего файла .y вам нужно что-то вроде

%{
struct ASTNode { ... };
%}

чтобы объявить тип ASTNode. Или вы можете вместо этого поместить его в файл .h:

%{
#include "astnode.h"
%}
%union { 
  ...
}
%term ...

и так далее.

person Norman Ramsey    schedule 27.12.2009