3

私は字句解析プログラムを作成しています。すでにほとんどの処理を行っているので、実行しないように言わないでください。
現在、トークンの配列を作成し、それだけです。

レクサーが提供する必要のある関数と、各関数が実行する必要のある機能について簡単に説明したいと思います。

私は最も完全なリストを受け入れます。

関数の例は次のとおりです。

へ:現在のトークンを消費して返します

また、レクサーにexpect関数を含める必要がありますか、それともインタープリターに実装する必要がありますか?

ちなみに、レクサーコンストラクターは引数として文字列を受け入れ、字句解析を行い、すべてのトークンを「トークン」変数に格納します。

言語はjavascriptなので、演算子をオーバーロードすることはできません。

4

3 に答える 3

5

私の経験では、次のものが必要です。

  • nextToken— 入力を進めて、次のトークンを取得します。
  • curToken— 現在のトークンを返します。動かないで下さい
  • curValue— STRING や NUMBER などのトークンには値があります。SEMICOLON のようなトークンはそうではありません
  • sourcePos— 現在のトークンの最初の文字のソース位置 (行番号、文字位置) を返す

編集— ああ、また:

  • prefetch— 最初のトークンを取得してレクサーを初期化します。

さらに、一部の言語では、2 つ以上の先読みトークンが必要になる場合があります。次に、プレーンのバリエーションが必要にcurTokenなるため、トークン ストリームのより大きな「ウィンドウ」を見ることができます。ただし、ほとんどの言語では、実際には必要ありません。

もう一度編集してください — また、基本的にこれまでで最も面白いものなので、書くなとは言いません。JavaScript ではあまり夢中になることはできませんが、Erlang のような言語では、別のパーサー プロセスに送信するトークンのストリームを生成させることで、レクサーを「トークン ポンプ」のように動作させることができます。

于 2010-05-30T21:21:39.797 に答える
3

レクサーを使用するプログラムを作成し、最終的に必要になる関数を実装することで、包括的なリストをコンパイルできるはずです。

于 2010-05-30T21:07:16.753 に答える
0

あなたが求めていることについてもう一度考えてみてください: 「レクサーが提供する必要がある機能は何か」

それが「必要とする」ものは、​​もちろん、必要なものはなく、必要なものに依存します。ご自身のニーズを説明していただければ、より適切な支援を提供できる可能性があります。しかし、まあ、とにかくここにショットがあります:

最小のものは、文字列を引数として取り、文字列のリストを返す単一の関数で構成されます (または、派手で遅延したい場合は、文字列に対するイテレータ)。これは多くのユースケースで十分であり、レクサーが「必要とする」ものです。

より説明的なものは、文字列よりも複雑なオブジェクトを返すことができ、各トークンに関する詳細情報 (たとえば、元の文字列内の位置など) が含まれているため、貧しいプログラマーにコードの構文エラーを伝えることができます。見る必要があります)。行番号以外にも、そこに追加する多くのメタデータを考え出すことができますが、繰り返しになりますが、それはすべてニーズに依存します。

于 2010-05-30T21:24:07.120 に答える