0

理論によると、lex ツール (私は ocamllex を読みました) について、正規表現のコレクションを DFA (実際には NFA と NFA2DFA) の C (OCaml) コードに変換します。DFA M の正式な定義は、5 つのタプル M = {Q, Sigma, transition_function, q0, F} です。生成されたファイルで見つけたのは次のとおりです。

  • Lexing モジュールのフィールドを持つ __ocaml_lex_tables というレコード
  • 再帰関数

DFA のオブジェクト/構造と ocamllex によって生成された構造の間にマッピングがありますか? 私はそれを「見る」ことができません....また、助けを求めてグーグルで検索しましたが、役立つ例は見つかりませんでした。
ocamllex ツールからの回答は、DFA コンテキスト(7 ステート、279 トランジション、テーブル サイズ 1158 バイトなど)で意味があります。

状態遷移表ですか?それを「読む」方法は?リンク/ヒントをありがとう!

4

1 に答える 1

1

ocamllex は速度を重視しているため、生成されたコードに明示的な状態が表示されません。理論上の表現は常に最速であるとは限りません。実際には、通常、一定の因子速度の改善を考慮して変換されます。状態は、生成された配列のインデックスで表される可能性が最も高いです。これは、アセンブリ コードを実際のソース コードにマッピングし直すことと考えることができます。一般に、コンパイラはいくつかの最適化を実行し、最もコンパクトで効果的なコードを目指して努力するため、すぐに行うことはできません。同じことが ocamllex にも当てはまります。そして興味深い質問は、なぜそれをしたいのですか??

于 2013-07-05T01:45:56.573 に答える