LexとYaccは最適化されたコードを提供しますか、それともパフォーマンスを向上させるために独自のコードを手動で作成する必要がありますか?
1768 次
2 に答える
2
作成するコードは、特にレクサー側で速度に大きな影響を与えます。Flexの一部のバージョンには、半ダース(またはそれ以上)の異なるワードカウンターが付属しており、ほとんどがFlexで記述され、いくつかは手動で記述されています。このコードは、スキャン速度を最適化する方法についてかなり良いアイデアを提供します(手書きのレクサーとマシンで生成されたレクサーで期待できること)。
パーサー側では、一般的にもう少し制約があります。セマンティクスに影響を与えずに多くの変更を加えることはできません。ここでは、使用するパーサージェネレーターに大きく依存します。たとえば、制約の少ない文法の一部のアルゴリズムは、一貫して比較的遅いパーサーを生成しますが、他のアルゴリズムは、制約の少ない構造に対してのみ速度を落とし、入力がある限り比較的高速に実行されます。より複雑な構造は使用しません。
于 2010-05-06T20:08:12.753 に答える
0
Yaccは、テーブル駆動型のパーサーを生成します。これは、適切に記述された手書きのパーサーほど高速になることはありません。同じことがlexにも当てはまるかどうかはわかりません。
于 2010-05-06T09:27:27.580 に答える