Skip to content

このレポジトリは,「コンピュータシステムの理論と実装 第2版(通称Nand2Tetris)」の実装プロジェクトを勉強がてら,go言語で実装していきます.

License

Notifications You must be signed in to change notification settings

Kaichi-Irie/nand2tetris-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

img GoDev Coverage Go Report Card GitHub license

Nand2TetrisをGolangで実装する

O'Reilly Japan - コンピュータシステムの理論と実装 第2版(通称Nand2Tetris)の実装プロジェクトを勉強がてら,go言語で実装していきます.書評はこちら.ドキュメントはこちら

  • ハードウェア(ブール論理,ブール算術,メモリー,機械語,コンピュータアーキテクチャ)
  • アセンブラ(Hackアセンブリ言語→Hackバイナリファイル)
  • コンパイラ バックエンド(VM変換器;VM言語→Hackアセンブリ言語)
  • コンパイラ フロントエンド(Jackコンパイラ;構文解析,コード生成;Jack言語→VM言語)
  • OS(Jack言語標準ライブラリ)

Jack Compiler Web

✨ Web上でJackコンパイラとHackアセンブラを実行できるWeb アプリケーションも制作し,公開しています.

img

インストール

go get -u github.com/Kaichi-Irie/nand2tetris-go

Nand2Tetrisとは

 Nand2Tetrisプロジェクトとは,Nandゲートから始めて,論理ゲート、加算器、CPUを設計したのち、アセンブラ、VM変換器、コンパイラ、OSを実装し,コンピュータを完成させます.そして,最後にその上でアプリケーション(テトリスなど)を動作させるというプロジェクトです.

 本プロジェクトでは,Hackという専用のコンピュータアーキテクチャ,およびその上で動作するJackという専用の高水準言語が用意されています.また,前半のハードウェアプロジェクトは,公式にOnline IDEが用意されており,そこで実装することができます.後半(6章以降)のソフトウェアプロジェクトは,各自,好きなプログラミング言語で実装することができます.

 プロジェクトの概要については,公式のCourse Promoの動画がとてもわかりやすいです. Course Promo

プロジェクトの構成

  • hardware/: ハードウェアの実装
  • assembler/: Hackアセンブラの実装
  • vm/: VM変換器の実装
  • jackcompiler/: Jackコンパイラの実装
  • img/: プロジェクトの画像

実行方法

テスト

テストは,go testコマンドを使って実行します.

$ go test ./...

アセンブラ

Hackアセンブラ アセンブラは,Hackアセンブリ言語をHackバイナリファイルに変換するプログラムです. アセンブリファイル(.asm)を引数に与えて実行すると,同じディレクトリに<input.asm>.hackが生成されます.これはHackバイナリファイルです.

$ cd assembler
$ go run main.go <input.asm>

コンパイラ バックエンド(VM変換器)

Hack VM変換器 VM変換器は,Hack VM言語をHackアセンブリ言語に変換するプログラムです. VMファイル(.vm)を引数に与えて実行すると,同じディレクトリに<input.vm>.asmが生成されます.これはHackアセンブリファイルです.

$ cd vm
$ go run main.go <input.vm>

ディレクトリを引数に与えると,ディレクトリ内の全てのVMファイルを変換し,同じディレクトリに<dirname>.asmが生成されます.この場合には,Sys.vmが最初に実行されるアセンブリコードが生成されることに注意してください.Sys.vmが含まれていない場合は,エラーが発生します.

$ go run main.go <dirname>

コンパイラ フロントエンド(Jackコンパイラ)

Hack Jackコンパイラ Jackコンパイラは,Jack言語をHack VM言語に変換するプログラムです.コンパイラは構文解析とコード生成の2つのフェーズに分かれています. 構文解析では,Jack言語のソースコードを解析し,構文木を生成します.その後,構文木をHack VM言語に変換します.

$ cd compiler
$ go run main.go <input.jack>

このXMLファイルは,<input>.vmという名前で出力されます. ディレクトリを引数に与えると,ディレクトリ内の全てのJackファイルをコンパイルし,同じディレクトリに<filename>.vmが生成されます.

$ go run main.go <dirname>

References

About

このレポジトリは,「コンピュータシステムの理論と実装 第2版(通称Nand2Tetris)」の実装プロジェクトを勉強がてら,go言語で実装していきます.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages