0

lex と yacc によって生成された式を解析できる .exe ファイルを作成します。しかし、私は画面から入力を取得し、画面からパーサーの結果を返すだけです。の使用に関するいくつかの提案を見ましたYY_BUFFER_STATE yy_scan_buffer(char *base, yy_size_t size)が、それでも良い方法を見つけることができませんでした。

いくつかのヘッダー (lex yacc によってコンパイルされる) をメイン プログラムの c++ に配置し、yylex() を使用してそれを呼び出し、入力として文字列を与え、メイン プログラムで戻り値を取得することは可能ですか? 助けてくれてありがとう、私はそれを実現する方法について混乱しています。ありがとう。

4

1 に答える 1

1

yy_scan_stringフレックスに文字列を入力として与える方法です。最初にそれを呼び出してから呼び出すyylexと、その文字列を入力として使用して、 ではなく からトークンを取得しますstdin。から EOF を取得するとyylex、文字列全体がスキャンされます。その後、 (メモリを解放するために)によって返されたyy_delete_bufferを呼び出し、新しい文字列をスキャンする場合は再度呼び出すことができます。YY_BUFFER_STATEyy_scan_stringyy_scan_string

代わりに使用yy_scan_bufferして、コピーを少し節約できますが、バッファを自分で適切に設定する必要があります (基本的に、1 つではなく2 つのNUL バイトで終了する必要があります)。

残念ながら、これらを宣言する flex の標準ヘッダー ファイルはありません。そのため、自分で宣言するか (flex のドキュメントから宣言をコピーします)、ファイルの 3 番目のセクションでそれらを呼び出す必要があり.lます。これはファイルの最後にそのままコピーされlex.y.cます。

于 2013-05-06T17:09:30.830 に答える