O'Reilly からFlex と Bisonを読んでいますが、事前に正規表現を学習することがプログラミング言語の開発に役立つかどうかを知りたいですか?
5 に答える
従来のプログラミング言語の構文の正規表現は非常に単純であるため、厳密に言えば、コンパイラを作成するために正規表現の専門家である必要はありません。一方、regexp は基本的なプログラミング スキルに属しているため、ほとんどの場合、正規表現について知っておく必要があります。
私はそう言うでしょう。Flex & Bison (p. 5) の例 1.3 で Flex スキャナーに出くわしたようですね。
/* recognize tokens for the calculator and print them out */
%%
"+" { printf("PLUS\n"); }
"-" { printf("MINUS\n"); }
"*" { printf("TIMES\n"); }
"/" { printf("DIVIDE\n"); }
"|" { printf("ABS\n"); }
[0-9]+ { printf("NUMBER %s\n", yytext); }
\n { printf("NEWLINE\n"); }
[ \t] { }
. { printf("Mystery character %s\n", yytext); }
%%
これまで見てきたように、NUMBER、空白、および謎の文字は単純な正規表現を使用して定義されています (その他の表現も同様ですが、あまり興味深いものではありません)。あなたのプログラミング言語は間違いなく他の正規表現を使用するでしょう (例えば、16 進リテラル、8 進リテラル、float/double、および C/C++/Java のコメントのトークンについて考えてみてください)。これらはプログラミング全般に役立つテクニックでもあるので、今のうちに何かを学んでおこうと思います。
インタープリター言語を作成していた場合は、正規表現を使用して、コード行内のさまざまなアトムを識別できます。
他の回答者はあなたがPCREか何かについて尋ねていると思っているので、私は軌道に乗っていないのかもしれません。しかし、言語の発明について話しているのであれば、正規表現は構文やその他のものと同じくらい重要です。
正規表現は、プッシュ ダウン オートマトンと決定論的有限オートマトンの間のチョムスキー階層の 1 ステップであり、知っておくべき非常に重要であり、何か、特にコードを解析するときに非常に必要です。