私は最初のパーサーをFlexで書こうとしています& Bison。数字を解析するときに、値をyylval
構造体に保存しようとしています。問題は、レクサーが数値に達したときにyylval
がヌルであり、セグメンテーション・フォルトが発生することです。混乱のなぜyylvalはnullですか?
(関連ポイント:?なぜそれが最もFlexの例(例えばhere)で、yylval
は構造ではなく、構造体へのポインタであるということです私はyylval
はなしtest.lで認識されるように得ることができませんでした%option bison-bridge
、およびそのオプションはyylval
ポインタをした。また、私はtest.yのmain
でyylval
を初期化しようとしたが、yylval
はないポインタ...?)
テストであるかのようにyylval = malloc(...)
がタイプmismatch--を与えます.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