コンピューター理論、チョットデキルようになりたい

コンピュータサイエンスの学び直しです

2020-01-01から1年間の記事一覧

学び直し46日目:10章 コンパイラ#1:構文解析(仕様、実装、展望、プロジェクト)(10章終了)

記録 記録 どんなことやってるかは、何となく理解できたと思う。45日目にまとめたようなことを実装して、Jack プログラムをソースとして与えることでトークナイズとパースが実行されたXMLファイルを出力している。このXMLファイルの中身を見れば、パーサによ…

学び直し45日目:10章 コンパイラ#1:構文解析(背景)

記録 構文解析器のしくみ トークナイザ パーサ 再帰的な構文解析のざっくり理解 記録 構文解析が、トークナイザとパーサの2つの仕事に分かれていることを学んだ。 構文解析器のしくみ 構文解析器は、トークナイザとパーサから成る。トークナイザでプログラム…

学び直し44日目:10章 コンパイラ#1:構文解析(導入部分)

記録 コンパイラとは コンパイラがやること 構文解析 コード生成 今日の筋トレ 記録 いよいよ高水準言語のコンパイラに突入。 コンパイラとは 「コンパイラは、一言でいえば、変換を行うプログラムである」とのこと。VM のあたりから思っていたけど、やっぱ…

学び直し43日目:9章 高水準言語:(一通り読んでさらっと終了)

記録 気になったところメモ 今日の筋トレ 記録 かなりごぶさた。かなり妥協しているが、とりあえず一通り読めました。高水準言語として、結構シンプルな Jack という言語に慣れ親しむための章。使い方は C とか Python とか、一般的な言語を触ったことがあれ…

学び直し42日目:8章 バーチャルマシン#2:実装、展望、プロジェクト(8章強引に終了)

記録 実装 ブートストラップコード 展望 今日の筋トレ 記録 ダレてきてしまったので、いったんこの章を完了とする。 実装 要点としては、VM ではスタック構造をとるため、関数呼び出しやフロー制御(分岐やループ処理)が入れ子型の構造となってることを理解…

学び直し41日目:8章 バーチャルマシン#2:VM仕様

記録 関数呼び出しプロトコル 今日の筋トレ 記録 書いてある通り、としか言いようがない。中でも、関数呼び出しについてだけ記載しておく。 関数呼び出しプロトコル if 文は、if-goto が呼ばれたときにスタックの最上位をポップして 0 かどうかで判定してい…

学び直し40日目:8章 バーチャルマシン#2:背景(プログラムフロー)

記録 プログラムフロー サブルーチン呼び出し 今日の筋トレ 記録 7章で作った VM に、プログラムフローとサブルーチン呼び出しを追加する。これにより、VM が完成する。プログラムフローは if、while、for など、条件に応じて次の実行先が変わる処理のこと。…

学び直し39日目:7章 バーチャルマシン#1:プロジェクト(7章終了)

記録 今日の筋トレ 記録 いつものように、コードは写経させていただいた。 github.comコンピュータ理論の勉強というよりは、Python でいい感じにコード書くにはどうしたらいいんだろう、みたいな方に興味が向いてしまった。実装力が未熟な自分としては、あま…

学び直し39日目:7章 バーチャルマシン#1:展望

記録 フロントエンドとバックエンド 有名な VM まとめ 今日の筋トレ 記録 フロントエンドとバックエンド 高水準言語のコンパイラは、二段階構成となっている。高水準言語から中間言語へと変換され、中間言語からハードウェアプラットフォームの機械語へと変…

学び直し39日目:7章 バーチャルマシン#1:展望

記録 フロントエンドとバックエンド 有名な VM まとめ 今日の筋トレ 記録 フロントエンドとバックエンド 高水準言語のコンパイラは、二段階構成となっている。高水準言語から中間言語へと変換され、中間言語からハードウェアプラットフォームの機械語へと変…

学び直し38日目:7章 バーチャルマシン#1:実装

記録 やること マッピング ガイドライン RAM アドレス0~15 VM 変換器の使い方 プログラムの構成 今日の筋トレ 記録 仕事がちょっと立て込んでて、一日に進める量が最近少なめ。やっと実装の節に目を通せた。VM 言語からアセンブリ言語への変換プログラムを実…

学び直し38日目:7章 バーチャルマシン#1:実装

記録 やること マッピング ガイドライン RAM アドレス0~15 VM 変換器の使い方 プログラムの構成 今日の筋トレ 記録 仕事がちょっと立て込んでて、一日に進める量が最近少なめ。やっと実装の節に目を通せた。VM 言語からアセンブリ言語への変換プログラムを実…

学び直し37日目:7章 バーチャルマシン#1:VM仕様②

記録 算術操作 配列操作 オブジェクト操作 今日の筋トレ 記録 VMの仕様を学び中。VMサンプルプログラムを眺めながら仕様の深堀り。ポイントは、「いちいちスタックを介する」ということ。 算術操作 上位言語で x や i という変数や定数をたとしても、VM にと…

学び直し36日目:7章 バーチャルマシン#1:VM仕様①

記録 概要 算術・論理コマンド メモリアクセスコマンド 今日の筋トレ 記録 VMの仕様を学んだ。今回は概要、算術・論理コマンド、メモリアクセスコマンドの3つ。プログラムフローと関数呼び出しコマンドは次の章で拡充するとのこと。 概要 VM プログラムは、.…

学び直し35日目:7章 バーチャルマシン#1:背景

記録 バーチャルマシン(Virtural Machine, VM) 概要 VM 言語 スタックマシン 今日の筋トレ 記録 コンパイラ構築に向けた始めの一歩として、バーチャルマシンを学ぶ。高水準プログラムを機械語へ一気に変換するのではなく、その間に中間コードを設けるらし…

学び直し34日目:6章 アセンブラ:プロジェクトまとめ(6章終了)

記録 6章まとめ 今日の筋トレ 記録 main プログラムを書いたのだけど、モジュール読み込みでこけてしまいうまく動かない…Python の調査になるのでいったん飛ばしちゃおう。path がなんかアカンのかな。github.com 6章まとめ 機械語の仕様と、機械語とニーモ…

学び直し33日目:6章 アセンブラ:プロジェクト-Symbol Tableモジュール

記録 Symbol Table モジュール 次やること 今日の筋トレ 記録 引き続き Hack コンピュータのアセンブラを Python で実装中。今日は Symbol と実アドレスを紐づけるための Symbol Table モジュールを実装(写経)。github.com Symbol Table モジュール Symbol…

学び直し32日目:6章 アセンブラ:プロジェクト-Codeモジュール

記録 Code モジュール 次やること 今日の筋トレ 記録 引き続き Hack コンピュータのアセンブラを Python で実装中。今日はアセンブリ言語のニーモニックをバイナリコードへ変換するモジュールを書いた。相変わらず以下を参考にさせていただいている。github.…

学び直し31日目:6章 アセンブラ:プロジェクト-Parserモジュール

記録 Parser モジュール 次やること 今日の筋トレ 記録 Hack コンピュータのアセンブラを Python で実装中。アセンブラって結局のところ、アセンブリ言語をある規則のもと 0/1 に書き換えるテキスト変換プログラムなのでは。。自力でがんばろうと思ったけど…

学び直し30日目:6章 アセンブラ:実装、展望

記録 仕様 アセンブラを構成するモジュール シンボルを含むアセンブラ 展望 今日の筋トレ 記録 アセンブラをどうやって実装するか見た。4つのモジュールから構成されるようにすればよさげ。また、アセンブラはどの言語を用いても作れるみたいなので、割とな…

学び直し29日目:6章 アセンブラ:Hackアセンブラからバイナリへの変換仕様

記録 ファイルの種類 シンボル 今日の筋トレ 記録 アセンブリコマンドとバイナリコードの対応表を基本的には良いすればよいわけだが、その対応表を作るにあたり規約を定められている。 ファイルの種類 バイナリコードのファイル拡張子が .hack、アセンブリ言…

学び直し28日目:6章 アセンブラ:背景

記録 シンボル 今日の筋トレ 記録 ここからソフトウェア階層の話。アセンブリ言語を0/1 表記の機械語に変換するアセンブラについて学ぶ。基本的には「決められたコマンドをそれに対応する機械語(バイナリ表記)の変換する」作業がされてるっぽい(変換テー…

学び直し27日目第二ラウンド:5章 コンピュータアーキテクチャ⑧:プロジェクト-Computer(5章終了)

記録 Computer 5章おさらい 今日の筋トレ 記録 Memory と CPU ができたので、いよいよ Computer の HDL を実装した。拍子抜けするくらい簡単だったw。部品をきちんと用意できれば、コンピュータは簡単につくれるのだなぁ。けっこう時間かかったけど、楽しか…

学び直し27日目:5章 コンピュータアーキテクチャ⑦:プロジェクト-CPU(3)

記録 コツ CPU 今日の筋トレ 記録 やっと CPU 書き終えた。自力でがんばろうとしたけど、結局以下を参考にさせていただいてしまった。。 blog.tojiru.net 考え方はだいたいあっていたが、その先の地道な作業を考え抜く力が不足している。ともあれ、形にはな…

学び直し26日目:5章 コンピュータアーキテクチャ⑥:プロジェクト-CPU(2)

記録 今日の筋トレ 記録 CPU の HDL を作成中。前回の考え方に従い、結線をどうすればいいか探り探り書いている。ALU の仕様の復習をやりつつ地道にやっている。何日かかるやら。 今日の筋トレ A メニュー予定(ダンベル重量 5kg) ダンベルフライ リングフィ…

学び直し25日目:5章 コンピュータアーキテクチャ⑤:プロジェクト-CPU(1)

記録 考え方 A, C 命令共通 A 命令の場合 C 命令の場合 今日の筋トレ 記録 Memory に続き、CPU の HDL を考え中。まだコードは書けてないけど、おぼろげに何をやったらよいかは見えてきた気がします。 考え方 A 命令、C 命令(4章参照)の意味をひとつずつ理…

学び直し24日目:5章 コンピュータアーキテクチャ④:展望、プロジェクト-Memory

記録 考え方 Memory のコード 今日の筋トレ 記録 Hack コンピュータの Memory の HDL を実装した。既存回路の使いまわしで楽チンかと思ったけど、アドレスの扱い方の理解が足りてなくて思いのほか苦戦。。CPU とかどうなるんだろう…。またこのお方のお世話に…

学び直し23日目:5章 コンピュータアーキテクチャ③:実装

記録 今日の筋トレ 記録 Hack ハードウェアの実装内容について読んだ。HDL を書くのが待ち遠しい。 CPU は複雑そうだが、3章でやった ALU, PC, レジスタを復習しながら試行錯誤するのが楽しそう。 データメモリ(RAM)については、SCREEN と KEYBOARD のメモ…

学び直し22日目:5章 コンピュータアーキテクチャ②:仕様

記録 今日の筋トレ 記録 Hack ハードウェアのプラットフォーム仕様を読んだ。仕様についても、すんなり入ってきた気がする。次の実装が楽しみだ。メモリマップやレジスタマップが何を意味するのか、ようやく理解できた気がする。どこをいじったら何が動くの…

学び直し21日目:5章 コンピュータアーキテクチャ①:背景

記録 プログラム内蔵方式 ノイマン型アーキテクチャ メモリ CPU CPU がやること 入出力 今日の筋トレ 記録 Hack というコンピュータを構築する。背景を読んだ。ほとんど知ってることだったけど、正確な定義を再確認できたのは有意義だった。 プログラム内蔵…