2015-11-06だいぶ間が空いてしまったけど、Nand2Tetrisもくもくの続き。ここからはソフトウェア層になります。作るべきはニーモニックの羅列を"Hack機械語"に変換するアセンブラ。単なる文字列操作の範疇なので割と簡単で、プログラミング言語を作ってる感覚はありません。—モダンなコンピュータの作り方Hackアセンブラについてアセンブラって単語を聞いてwktkしているバイナリアンな人がいたら申し訳ないのだけど、Nand2Tetrisにおけるアセンブラはあくまで教育用のもので、現実のCPUで使われるものとはだいぶ異なると思います。アセンブル後に作成されるのはバイナリファイルではなく、"0100010101..."という、文字で書かれたテキストファイルです。読みやすいですね!例えば、こんな感じで変換されます。@iM=1@sumM=00000000000010000111011111100100000000000000100011110101010001000コメント行やラベル行を取り除くと、XXX.asmファイルとXXX.hackファイルの行数は一致することになります。文字列操作ができるプログラミング言語なら何を使っても作れます。勉強を兼ねてGo言語を使ってみることにしました。getできた方がいいと思ったので、リポジトリを分割しました。github.com/hirak/Assemblerこれでインストールされるのは「Assembler」という名前のコマンドです。Macで作っているのでWindowsでの動作は確認していません。foo.hack00000001000000001110110000010000...まだGoに慣れてなくて、Goらしくない書き方をしているかもしれませんが、何とか書けるものですね。一応、テキスト通りに3つのモジュール的な物を作り、main関数で組み立てています。mainだけだし、これぐらいなら一つのファイルで作ってしまう人もいるのかも?Parser(ファイルを読み込んでニーモニックを分割解釈する)Code(ニーモニック一つ一つを1010101...の文字列に変換する。素朴なswitch文の羅列)SymbolTable(アセンブリ言語でラベル構文や変数が使えるように、グローバル変数みたいなものを覚えてくれるもの。mapにメソッドを生やしただけ)次へ向けて次章からコンパイラの実装に向けての作業になるので難易度が跳ね上がるっぽい。覚悟を決めてとりかかるしか無いな。NAKANOSeesaaブログ×この広告は180日以上新しい記事の投稿がないブログに表示されております。