gpt4 book ai didi

bison/lex YYSTYPE 声明为结构

转载 作者:行者123 更新时间:2023-12-05 08:02:02 24 4
gpt4 key购买 nike

我已经尝试了一段时间,通过使用 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 中,在 token 规则中,尝试访问 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

有什么建议吗?

非常感谢,对不起我的英语。

最佳答案

David 是对的,默认情况下 yacc 给你一个 %union 指令,但是看到它被翻译成纯 C,你可以只在里面嵌套你的结构:

%union {
struct {
int atrib;
char *lexema;
dtipo tipo;
};
}

在支持联合内部匿名结构的 C 方言(例如 C99)中,它将像您期望的那样简单地工作。

关于bison/lex YYSTYPE 声明为结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10723464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com