徒然なる日々を送るソフトウェアデベロッパーの記録(2)

技術上思ったことや感じたことを気ままに記録していくブログです。さくらから移設しました。

minosys script を作ろう (4)

ここからは実装に入るので、言語実装にお決まりのパターンに入ります。
現在の実装は

https://github.com/minosys-jp/minosys-script.git

に置いてあります。(作成途中なので、まだコンパイルできません!)

Token の切り出し

まず、token をどういう単位にするか決めなくてはなりません。
構文解析のしやすさを考慮して、ここでは、以下のように
切り分けることにしました。

記号 意味
LT_NULL スクリプトの終端
LT_NL セミコロン(文の終わり)
LT_TAG 予約語でない文字列
LT_INT 整数
LT_DNUM 浮動小数点数
LT_STRING リテラル文字列
LT_BEGIN 複文の開始
LT_BEND 複文の終了
LT_OP 演算子
LT_VAR 変数
LT_FUNC 関数呼び出し(lexでは使っていない)
LT_FUNCDEF 関数定義(lexでは使っていない)
LT_HTML HTML文書
LT_<予約語> 指定された予約語に相当

現在の予約語は以下の通りです。

this, super, if, else, for, while, break, continue,
return, global, new, class, import

実装言語が C であれば flex を使って省力化することも可能ですが、
(っていうか、普通そうする)将来、他言語による実装も可能にする
ため、あえて C++ で実装してみました。

HTML モードと minosys script モードがあるので、state が若干
複雑です。
それ以外の実装は、教科書通りになっています。速度の遅さもそのまま。

次回は構文解析と解析木の作成について考えます。