He buscado casi todos los materiales en línea. Pero todavía estoy confundido por qué Lexer no puede identificar yylval.yylval indefinido con flex y bison
Aquí es el caso: he definido un grupo de ADT en node.h
y hacerlos realidad en node.c
, mi propósito es generar un AST después de estas estructuras se almacenan correctamente. Pero estoy sorprendido con el archivo de bisontes.
En primer lugar, cambiar %union
a union YYSTYPE {...};
y typedef union YYSTYPE YYSTYPE;
, no por lo que necesito hacer esto, algunos otros archivos publicados en Internet parece funcionar bien con %uinion
.
Entonces, estoy sorprendido con yylval
cosas. He hecho bison -d
cosas, y lo he comprobado ya en parser.c
(he especificado la salida de bisonte), así que creo que extern YYSTYPE yylval;
debería funcionar. Pero no es así Entonces me pregunto si hay otra manera de resolver el problema no declarado de Yylval.
Yo sólo uso los dos tipos de YYSTYPE
estructura, int
y char *
, puedo separar la unión YYSYTPE
y estructura para la AST? Esto significa que los no terminales no tendrán tipos asociados. ¿Tienen alguna otra idea?
todavía me pregunto lo que quiere decir "separar la unión' YYSTYPE' y estructura para la AST", y yo no creo que sea necesario. ¿Has tenido problemas al usar '% union' y'% type' en bison? – neuront
@neuront Sí, estoy de acuerdo contigo. No es necesario especificar explícitamente YYSTYPE en bison. Pero el problema es que no puedo pasar sin hacer eso.En otras palabras, aunque '% union' y'% union YYSTYPE' funcionan de la misma manera, sin embargo, en mi caso, tengo que elegir el último. No sé por qué? Para '% union' y'% type', conozco la relación entre ellos. Solo sé cómo resolver el error con 'YYSTYPE undefined'. Cuando busqué en línea, encontré que es un problema común. – chenrui