C に似たマクロを含む入力ファイルを読み取る小さなプログラムがあります。処理は 2 つのパスで行われます。最初のパスはマクロ定義を検索して保存し、2 番目のパスはマクロ呼び出しを検索して展開/置換します。
これはすべてうまく機能しますが、時間がかかります。現在、これは私がそれを行う方法です:
foreach token in file:
foreach macro in macroDefinitions:
if token equals macro.name:
expand()
endif
end foreach
endforeach
この疑似例では、'token' はソース ファイルからの単語であり、'macro' は最初のパスからのマクロ定義です。約 20,000 のマクロ定義と 1,800 の入力ファイルがあり、合計で約 600,000 行が処理されます (各行は n 個のトークンに分割されます)。これは、合計比較回数が (トークンの数) * (マクロ定義の数) であることを意味します。どうすればこれをスピードアップできますか? 私は何かを見逃していますか、それともこれらすべての比較を本当に行う必要がありますか?
追加情報として、トークンは String[] 配列の文字列であり、マクロはリストの ArrayList タイプのマクロ オブジェクトです。他の種類のデータ構造を使用してプロセスを高速化できますか?