C言語

コンピュータシステムの理論と実装の11章のコンパイラ#2:コード生成を実装しました

前回の続きです*1。今回はコンピュータシステムの理論と実装(以下、nand2tetris本)の11章のコンパイラ#2:コード生成をC言語で実装してみました。 今回のコード 概要 シンボルテーブル SymbolTableモジュール CompilationEngineモジュール コード生成 最小…

コンピュータシステムの理論と実装の10章のコンパイラ#1:構文解析を実装しました

前回の続きです。今回はコンピュータシステムの理論と実装(以下、nand2tetris本)の10章のコンパイラ#1:構文解析をC言語で実装してみました。 今回のコード 概要 トークナイザ main.c (JackAnalyzerモジュール) JackTokenizerモジュール パーサ 式を含まな…

コンピュータシステムの理論と実装の7章と8章のバーチャルマシンを実装しました

前回の続きです。今回はコンピュータシステムの理論と実装(以下、nand2tetris本)の7章と8章のバーチャルマシンをC言語で実装してみました。 今回のコード 概要 7章(スタック操作) スタック算術コマンド main.c Parserモジュール CodeWriterモジュール メ…

コンピュータシステムの理論と実装の6章のアセンブラを実装しました

前回の続きです。今回はコンピュータシステムの理論と実装(以下、nand2tetris本)の6章のアセンブラをC言語*1で実装してみました。 今回のコード 概要 シンボルを含まないプログラムのためのアセンブラ Parserモジュール Codeモジュール main.c シンボルを…

C言語でクロージャ

クロージャって何だろう? クロージャは関数と環境を一緒にしたものである。クロージャは、関数がレキシカル環境から何かを参照するときには暗黙に必ず作られている。 『ANSI Common Lisp』- 6.5 クロージャ より どんな風に使うのだろう? アキュムレータを…

map and grep, foreach on C

Perlでリスト処理といえばmapとgrepにforeachだと思う。 たとえば、こんな感じで使える。実行すると"6 12 18 24 30"が標準出力に出力される。 #! /usr/bin/perl use strict; use warnings; # 要素に1から10を持つリストを生成する。 my @list1 = (1..10); # …

C言語で似非Java風味の例外フロー

Javaにはtry〜catch〜finallyの例外フローが存在するけどC言語には無い。でも実現することはできる。こんな感じで使える。 #include <stdio.h> #include <stdlib.h> #include "exception.h" /* 例外フローの定義 */ /* 例外を投げる関数 */ void sub1(EXCEPTION *e) { printf("</stdlib.h></stdio.h>…

最初のプログラムはハローワールド?

プログラム言語で最初のプログラムと言えばハローワールド。 もはや定番ですが分かりやすいとは言えない。例えば『プログラミング言語C』では最初に書くべきプログラムとして次の「ハローワールドを印字する」コードを掲載している。 #include <stdio.h> main() { pri</stdio.h>…