ファイルをbisonに渡すと(通常の方法)、正常に機能し、ファイルを解析して文法をチェックします。ただし、同じ文字列を次のように渡すと、
yy_scan_string(string);
yylex();
yyparse();
最初のトークンの後でクラッシュします、それはそれが期待していると言います$end
。どういうわけか何かをリセットする必要がありますか?ここの例は何も言っていません。
Bisonを誤って使用しています。Bisonを使用する場合は、yyparse()のみを呼び出します。yylex()は呼び出さないでください。この関数は、トークンが必要なときはいつでもyyparse()によって呼び出されます。
あなたがしているのは、文字列を入力として設定し、トークンを見つけて入力ストリームを進めるyylexを呼び出すことです。次に、yyparse()を呼び出します。このyyparse()呼び出しは、現在のポイント(yylex()によって取得された最初のトークンの後)から入力の終わりまでの入力で何かを見つけることを期待しています。これは、文法の文になります。
問題は、yylex()の呼び出しが原因で、すでにトークンを見逃していることです。