しょぼいマシンで自作プログラミング言語を作ってみる (10)
字句解析の実装が完了
文字型、文字列型、正規表現パターン型について
文字型はシングルクォート、文字列型はダブルクォート、正規表現パターン型はバッククォートで囲むようにしました。
エスケープシーケンスの扱いについて、以下にまとめます。
字句解析の段階でエスケープ文字(バックスラッシュ)のあとに何が来るかを判定する対象は絞っています。
'\'のあとに改行が続く場合の扱いとして、'\'はトークンに読みません。改行もトークンに読みません。つまりは継続行扱いとなります。
"\o"のあとに0から7の数字が連続している場合は8進リテラルです。字句解析の段階では何文字でも読み進めます。アンダーラインは対象外です。
"\x"のあとに0から9の数字、大小問わずの英字aからfが連続している場合は16進リテラルです。字句解析の段階では何文字でも読み進めます。アンダーラインは対象外です。
"\u"のあとに0から9の数字、大小問わずの英字aからfが連続している場合は16進リテラルですが、Unicodeのコードポイントを示すものです。字句解析の段階では何文字でも読み進めます。アンダーラインは対象外です。
コメントアウトについて
単行コメントとブロックコメントがあります。
それと読み捨てられるコメントとドキュメント自動生成用のコメントがあります。
"//"から始まるのが単行コメントです。
"/#"から始まるのがドキュメント自動生成用の単行コメントです。
"//<"から始まり、"//>"で終わるのがブロックコメントです。
"/#<"から始まり、"/#>"で終わるのがドキュメント自動生成用のブロックコメントです。
ブロックコメントにおいて、文字列リテラルと同様に、'\'のあとに改行が続く場合の扱いとして、'\'はトークンに読みません。改行もトークンに読みません。つまりは継続行扱いとなります。
予約語も揃えた
プログラミング言語において、予約語なるものがあります。プログラムの制御をするためのものですね。
例としてはifとかswitchとかforとかwhileといった類のものですね。
それも用意しました。
これで問題ないはず
数値リテラル、文字列リテラル、演算子、型宣言、予約語、コメントアウト。これを字句として解析する機能が揃えば、字句解析の機能は完成といって間違いないかと思います。
ということで、次回以降は構文解析の話になりますね。