私はしばらくの間、bisonとlexを使用して文法のパーサーを実装しようとしてきました。
yylvalの型の再宣言に問題があります。私は自分自身を説明します。
私は4つのファイルを持っています:lexico.l、parser.y、funcionesTabla.c、funcionesTabla.h
1つ目はlexの仕様を含み、2つ目はbison / yaccの仕様を含みます。最後の2つは、シンボルテーブルを処理するための一連のメソッドです。
私はfuncionesTabla.hにあります:
typedef enum {
entero,
real,
caracter,
arrayEntero,
arrayReal,
arrayCaracter,
matrizEntero,
matrizReal,
matrizCaracter,
desconocido,
no_asignado
} dtipo ;
typedef struct{
int atrib ;
char *lexema ;
dtipo tipo ;
} atributos;
#define YYSTYPE atributos
私は次を試しました:
parser.yから、ルール内でyylval.tipoにアクセスしようとしましたが、問題ありません。
lexico.lから、トークンルール内で、yylval.lexema(またはいずれかの属性)にアクセスしようとしましたが、gccは次のように言っています。
lexico.l: In function ‘yylex’:
lexico.l:93: error: request for member ‘lexema’ in something not a structure or union
make: *** [lex.yy.o] Error 1
なにか提案を?
よろしくお願いします。英語でごめんなさい。