0

私はこれが一般的な質問であることを知っています。

私はコンパイラをプログラムしようとしていますが、ファイルの読み取り中に言語のトークンを取得する方が良いか (つまり、最初にファイルを開き、読み取り中にトークンを抽出し、最後にファイルを閉じる)、ファイルを読み取る方が良いかどうか疑問に思っていました。まず、それを閉じてから、変数のデータを操作します。この擬似コードは次のようになります。

file = open(filename);
textVariable = read(file);
close(file);

getTokens(textVariable);

最初のオプションは次のようになります。

file = open(filename);
readWhileGeneratingTokens(file);
close(file);

メインメモリに関して追加コストがないため、最初のオプションの方が良さそうです。ただし、ファイルを開く時間を最小限に抑えるため、2 番目のオプションを使用するといくつかの利点があると思います。

4

2 に答える 2

0

コンパイラは、入力から一度に 1 文字ずつ処理できるように慎重に設計されています。処理の前にファイル全体を読み取らないか、そうする必要がありません。無意味な待ち時間が追加されるだけです。処理する前に行全体を読み取る必要さえありません。

于 2013-10-25T01:24:09.400 に答える
0

具体的なデータを提供することはできませんが、通常、コンパイラがソース コードのトークン化に費やす時間は、ターゲット コードの最適化/生成に費やす時間に比べてかなり短いものです。このため、ソース ファイルが開いている時間を最小限に抑えることは時期尚早に思えます。さらに、トークン化する前にソース ファイル全体をメモリに読み込むと、行ごとの実行 (インタープリター言語と考えてください) や、ファイル以外の場所からの入力の読み取り (stdin のようなストリームと考えてください) を防ぐことができます。ソース ファイル全体をメモリに読み込むオーバーヘッドは、コンピューターのリソースに見合うものではなく、最終的にはプロジェクトに悪影響を与えると言っても過言ではありません。

于 2013-10-16T20:11:33.770 に答える