Я пытаюсь написать свой первый парсер с Flex & Bison.При разборе чисел я пытаюсь сохранить их значения в структуре yylval
.Проблема в том, что yylval
равно нулю, когда лексер достигает числа, что вызывает ошибку сегментации.
(Смежный вопрос: почему в большинстве примеров Flex (например, здесь ) yylval
является структурой, а не указателем на структуру? Я не могполучить yylval
для распознавания в test.l без %option bison-bridge
, и этот параметр сделал указатель yylval
.Также я попытался инициализировать yylval
в main
test.y, но yylval = malloc(...)
дает типнесоответствие - как будто yylval
это не указатель ...?)
test.l
%{
#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; }
%%
test.y:
%{
#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