我已经尝试了一段时间,通过使用 bison 和 lex 来实现语法解析器。
我对 yylval 的类型重新声明有疑问,我自己解释一下。
我有 4 个文件:lexico.l、parser.y、funcionesTabla.c、funcionesTabla.h
第一个,包含 lex 的规范 第二个,bison/yacc 的规范 最后两个,是一堆处理符号表的方法。
我有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
有什么建议吗?
提前非常感谢,对不起我的英语。