私はこの質問に対する答えを読んでいました。 なぜ誰かがレクサーを個別に必要とするのかについての答えを見つけることができないようです
これは、プログラムがコンパイル中に実行するステップの1つですか?誰かが私がレクサーを必要とする理由とそれがどのような目的に役立つのかを簡単に説明できますか?
私はこの質問に対する答えを読んでいました。 なぜ誰かがレクサーを個別に必要とするのかについての答えを見つけることができないようです
これは、プログラムがコンパイル中に実行するステップの1つですか?誰かが私がレクサーを必要とする理由とそれがどのような目的に役立つのかを簡単に説明できますか?
レクサーは入力文字ストリームを受け取り、それをトークンに変換します。
これは、さまざまな目的に使用できます。簡単なテキスト処理と操作のために、語彙素に変換を適用できます。
または、語彙素のストリームをパーサーにフィードして、パーサーツリーに変換することもできます。
目標がコンパイルである場合、字句解析が最初のステップです。これは、文字を取得してトークンに変換する下位レベルのステップと考えてください。パーサーは、アルファベットがトークン(レクサーによって作成された)で構成されている高レベルのメカニズムであり、トークンを解析して解析ツリーを作成します。
目標がテキスト操作である場合、操作ルールを語彙素自体に適用できます。
良い例は、ウィキペディアhttp://en.wikipedia.org/wiki/Lexical_analysisにあります。
たとえば、式 "(33 + 3)* 2"を評価する場合、最初のステップは文字列をトークン "("、 "33"、 "+"、 "3"、 ")"、"*に分割することです。 "、"2"。コンパイラについての私のコースを覚えている限り、これは最長一致の単語オートマトンによって行われます。
知っておくべき重要なことは、構文解析にレクサーは必要ないということです。
レクサーは、いくつかの点で解析を単純化するために多くのコンパイラーによって使用される従来のステップです。ただし、必ずしも解析が単純化されるわけではなく、実際には、中間オブジェクトが作成されるという事実によって解析が遅くなる可能性があります。トップダウンの再帰下降パーサーや、PEG解析式の文法のようなものは、レクサーを使用せず、テキスト全体をすぐに解析します。
レクサーは、構文解析を概念的に単純化するために使用できますが、必須ではありません。