flex+bisonで簡単なパーサ
flexとbisonで簡単な設定ファイルパーサを作ろうと思ったのですが、bisonの方で書き出した$1,$2,...の値が変です。どこが悪いのでしょうか?ファイルが長くなって申し訳ありません。
# my.l(パターン部のみ)
%%
[=:] yylval.str_value=yytext; return EQ;
[^=:\t\n]+ yylval.str_value=yytext; return TOKEN;
[ \t]+ yylval.str_value=yytext; return WS;
\n yylval.str_value=yytext; return CR;
%%
# my.y(非c宣言・規則部のみ)
%union{
char *str_value;
}
%token EQ TOKEN CR WS
%type <str_value> assign noeq_exp exp exp_l EQ TOKEN CR WS
%%
input: /* empty */
| input line
;
line: CR
|assign CR
;
assign: noeq_exp EQ exp_l
{
printf("<assign>%s|%s|%s\n", $1, $2, $3);
}
;
noeq_exp:TOKEN
|TOKEN WS
;
exp: noeq_exp
|EQ
;
exp_l: exp
|exp_l exp
;
%%
これらから作成したパーサを実行すると、
aaa=111
という入力に対して、上のassignルールの箇所に対応した場所で、
Reducing stack by rule 5 (line 21):
$1 = nterm noeq_exp ()
$2 = token EQ ()
$3 = nterm exp_l ()
<assign>aaa=111
|=111
|111
と出力されます。期待した出力は、
<assign>aaa|=|111
なのですが。。。
お礼
早速の御返事有難う御座いました。