コンパイラの実装に取り組んでおり、ファイルの終わりに達したかどうかを確認したいですか?
これは lex ファイルの yywrap() 関数を使用して実行できることはわかっていますが、必要なのは、EOF が 16 進値 0x1a のように明示的に定義されている場合、それをどのように参照するかということです。
例:
main() { printf("EOFマーカーをチェック\n"); '0x1a' <-- 実際の EOF マーカー。
上記が構文エラーではなく、エラーとして報告されるようにしたい
上記はできますか?私の要件は、パーサーに EOF トークンを含めることだけですが、残念ながら、日付までそれを行うことができませんでした:-((、残りの作業は簡単に実行できます。ルールを指定するだけですそのような:
print : print_stmt '(' stmt_valid ')' colon '\n'
{
OK do the rest
}
| print_stmt '(' stmt_valid ')' colon end_indicator
{
print error message and close application.
}