【发布时间】:2012-05-23 15:43:51
【问题描述】:
我已经尝试了一段时间,通过使用 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
有什么建议吗?
提前非常感谢,对不起我的英语。
【问题讨论】: