私は最近、コンパイラー原則を学んでいます。テキスト・ブックのすべての例で、入力ソース・ファイルを分析する方法を示すために、正規表現で「lex」または「flex」を使用する言語字句解析プログラムについて説明しています。正規表現を使用して、あらゆる種類の字句解析プログラムの要件を表現できますか?
既知のプログラミング言語はすべて、字句解析を行うためにタイプ3の文法を使用して実装できることを示していますか?それとも、テキストブックで簡単なサンプルを使ってアイデアを見せているだけですか?
私は最近、コンパイラー原則を学んでいます。テキスト・ブックのすべての例で、入力ソース・ファイルを分析する方法を示すために、正規表現で「lex」または「flex」を使用する言語字句解析プログラムについて説明しています。正規表現を使用して、あらゆる種類の字句解析プログラムの要件を表現できますか?
既知のプログラミング言語はすべて、字句解析を行うためにタイプ3の文法を使用して実装できることを示していますか?それとも、テキストブックで簡単なサンプルを使ってアイデアを見せているだけですか?
ほとんどの言語の語彙は、正規表現で識別できますが、例外もあります。 (コンピュータ言語の解析に関しては例外なく例外があります)
たとえば、C++の生の文字列リテラルと正規表現を一致させることはできません。 Javacriptプログラム内の/=
が、分割割り当てを示すために使用される1つの語彙素であるのか、それとも=で始まるatringに一致する正規表現の開始であるのかを構文解析なしで伝えることはできません。ネストされたコメントを許可する言語(Cとは異なります)では、もう少し強力なものが必要です。
しかし、生のCでフルステートマシンを書くよりも、いくつかの正規表現を書く方がはるかに簡単です。そのため、いくつかの例外的なケースであなたの意志にフレキシブルな曲げ方を見つける動機がたくさんあります。またflexは、必要に応じて正規表現のストレートジャケットから脱出できる機能を提供することによって、ある程度まで協力します。字句解析の上級クラスでは、これらの機能の詳細を学ぶことができます。