2018-01-01から1ヶ月間の記事一覧

ltmpc: Locationの解説

Locationでは、グローバル変数・自動変数・文字列定数の割り付けを行っています。 このコードを書き始めたのは完成の前日で、あわてて書いていたのでコードが適当になってきています。 FrameEnvironment フレームというか、中かっこ文ごとの、「今のSPがBPか…

ltmpc: TypeAnalysisの解説

TypeAnalysisでは、各部分式に型をつけていきます。また、制御構文により暗に生成されるラベルの生成も行っています(ここでやる必要はなかったですね……)。 もうこの辺では空間計算量を気にする余裕がなくなってきていたので、全部愚直な線形再帰で処理して…

ltmpc:Parserの解説

Parserは、LR(1)法もどきの手法によりトークン列を抽象構文木に変換しています。 まずは、LR(1)法のおさらいからします。 LR(1)法 LR(1)法を使うと、(文法を適切に書いたとき)あらゆる決定性文脈自由言語を認識することができることが知られています。 ま…

ltmpc: LexerとPreLexerについての解説

この二つのプログラムでは、ltmpcへの入力文字列をトークン列に切り分けることを行っています。 トークン列への切り分けは、前から順に行っていくのではなく、(疑似的な)並列処理を行いマージしていく、という普通ではない方法を使っています。 なぜこのよう…