このWeb ページでは、lex プログラムに「多数の予約語がある場合、単純に lex を文字列に一致させ、それが変数か予約語かを独自のコードで判断する方が効率的である」ことを示唆しています。
私の質問は次のとおりです。より効率的な場所と理由は? レクサーのコンパイルが高速であることを意味する場合、レクサーを使用して入力を解析するプログラムから 1 つのステップが削除されるため、私はそれについてあまり気にしません。
lex はあなたの説明を使用して、一度に 1 文字ずつ処理するステート マシンを構築しているようです。ステート マシンのサイズを大きくすると、識別子に 1 つのルールを使用して複数の文字列比較を行うよりも、必然的に遅くなるというのは論理的ではないように思われます。
さらに、これが最適化として理にかなっている論理的な理由があることが判明した場合、多数の予約語と見なされるのは何ですか? さまざまなことに約 30 の他のルールと比較して、約 20 のルールがあります。それは多数の予約語と見なされますか? 他のシンボルのいくつかに同じ戦略を使用する必要がありますか?
結果をグーグルで検索しようとしましたが、見つけた関連記事だけが、この戦略がよく知られているかのように説明されていましたが、理由はありませんでした。
関連する場合は、flex 2.5.35 を使用しています。
編集:これは、複数の長いリテラル文字列の照合を要求されたときに、 lexが非効率的なスキャナーを生成すると主張する別のリファレンスです。また、理由も示しません。