2

もう2時間も探してる どうしたらいいのかわからない

数千の単語に一致するレクサーを使用するアナライザーを構築しようとしています。これらは自然言語の単語であるため、非常に多くあります。

最初に、1 つのトークンに対して 1000 個の異なる一致を使用して簡単な方法で試しました。

    TOKEN :
{
    <VIRG: ",">
|   <COORD: "et">
|   <ADVERBE: "vraiment">
|   <DET: "la">
|   <ADJECTIF: "bonne">
|   <NOM: "pomme"
        |   "émails"
        |   "émaux"
        |   "APL"
        |   "APLs"
        |   "Acide"
        |   "Acides"
        |   "Inuk"

[...]

javac のコンパイル後、コードが大きすぎることが返されます。

では、lexer で何千ものトークンを管理するにはどうすればよいでしょうか?

  1. n 個の単語に 1 つのトークンを使用するよりも、各単語に n 個のトークンを使用する方が効率的であると読みました。しかし、この場合、1000 個以上のトークンを含むルールを作成することになりますが、これは良いアイデアとは思えません。

  2. トークン マネージャーを変更するか、トークン マネージャーを作成して、リスト内の単語に一致するようにすることができます。

  3. ここで、レクサーが有限状態マシンであることを知っています。これが不可能な理由です。他のレクサーを使用する方法はありますか? ;

  4. すべての単語に一致する巨大な正規表現を自動的に生成することはできますが、後で単語を独立して処理することはできません。

  5. ファイルからトークンをロードする方法があるかもしれませんが、この解決策は解決策 2 と 3 にかなり近いものです。

  6. 多分私は別の言語を使用する必要がありますか?XLE (70,000 を超えるトークンのレキシコンを処理できる) から Java に移行しようとしていますが、ここで興味深いのは Java ファイルを生成することです!

これで、javacc lexer を使用して数千のトークンを処理する方法を見つけることができます。誰かがそれに慣れていて、アイデアを持っているなら、それは素晴らしいことですか?

一番

コランタン

4

1 に答える 1