Flex で生成された C lexer と、Bison で生成された C++ パーサーを使用しています。文字列入力のみを受け入れるようにパーサーを変更しました。
ループ内でパーサー関数yyparse()
を呼び出し、ユーザー入力を 1 行ずつ読み取っています。入力が「終了」の場合、ループを停止します。
私が直面している問題は、入力がどのルールにも一致しない場合、パーサーが突然停止し、次の反復で同じ状態で開始され、(構文エラーのために) 停止されたルールが完了することを期待していることです。
入力が有効で、パーサー ルールと一致する場合は正常に機能します。
構文エラーでyyerror()
、単純なエラー メッセージを表示する関数を再定義しました。
入力がどのパーサー ルールとも一致しない場合にパーサーの状態をクリアして、次の反復でパーサーが新たに開始されるようにするにはどうすればよいですか?