为什么yylval为null?
|
我正在尝试用Flex&Bison编写我的第一个解析器。解析数字时,我正在尝试将其值保存到
yylval
结构中。问题是,当词法分析器到达数字时,yylval
为空,这会导致分段错误。
(相关的困惑点:为什么在大多数Flex示例(例如此处)中,“ 0”是一个结构,而不是指向结构的指针?如果没有“ 4”,我无法在test.l中识别出“ 0”,并且该选项使yylval
成为指针。此外,我尝试在test.y的main
中初始化yylval
,但是yylval = malloc(...)
给出了类型不匹配的情况-好像yylval
不是指针...?)
测试
%{
#include <stdio.h>
#include <stdlib.h>
#include \"svg.tab.h\"
%}
%option bison-bridge
%option noyywrap
%%
[0-9]+ { yylval->real = atof(yytext); return REAL; }
. { return *yytext; }
%%
测试:
%{
#include <stdio.h>
void yyerror(char *);
%}
%union {
double real;
}
%token <real> REAL
%%
...
生成命令:
bison -d test.y && flex test.l && gcc lex.yy.c test.tab.c
没有找到相关结果
已邀请:
1 个回复
赣借
更改为
才能正常工作) 。 flex中的
与野牛中的
匹配,后者使用不同的API在yyparse和yylex之间进行通信(yylval成为yylex的指针参数,而不是全局var)。 因此,您的基本问题是flex和bison之间的API不兼容-您需要在BOTH或NEITHER中同时指定纯api / bison-bridge-如果您以一种方式而不是另一种方式进行操作,则会出现问题。