2009-12-27 12 views
0

Je suis un peu confus sur la façon de spécifier le type de mon membre de la grammaire. Je veux déclarer prog et decls comme ASTNode. Je vais utiliser ces membres pour ajouter à une liste ou etc. Mais yacc ne peut pas les reconnaître comme un ASTNode et je reçois des erreurs de type.en utilisant union dans yacc pour les structures

Ici, mon tIdent, tCharConst, tIntConstant ont quelques types mais, comment donner le type ASTNode à mes membres.

%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 
        ; 

Répondre

2

Au début de votre fichier .y, vous avez besoin quelque chose comme

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

afin de déclarer le type de ASTNode. Ou vous pourriez mettre à la place dans un fichier .h:

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

et ainsi de suite.