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

共用体で作るポインタリスト

共用体を使ってポインタのコレクションが作れます。ポインタのサイズ(sizeof(struct Struct*)とsizeof(union PtrList*))が同じだからサイズ的にはok。(struct Struct**)の変数を(union PtrList*)にキャストできるのが新鮮でした。フィールド名を通して元の型…

正規表現エンジンの実装(1)

これから数回をかけて正規表現エンジンをC言語で実装します。この回では、メタ記号('(',')', '|','?','+'..)無しの正規表現を作ります。すると結局、文字列の比較をするプログラムを作るということになります。例えば"./a.out hello hello"としたら"match\n"…

GNU Bisonの使い方(C言語)

GNU Bisonは人が読んで理解しやすい文法ファイル(*.y)から、C,C++そしてJavaのparserを生成してくれるツールです。それぞれに多少APIが異なると思いますが、ここではC言語で使う場合に定義しないといけない関数、アクセスできるグローバル変数について説明し…

C言語から機械語を直接実行する方法

v8(JavaScript Engine)を読んでいると、機械語を直接生成してから、それを関数型に流し込んで実行していることが分かってきました。面白いと思ったのでC言語で簡単に再現してみました。 コード #include <stdio.h> #include <sys/mman.h> #include <string.h> #include <assert.h> int sum(int a, int </assert.h></string.h></sys/mman.h></stdio.h>…

C/C++のポータブルな実行環境としてのGoogle NaCl

ここ数日、Google NaClを使ってC++コードをweb上で実行できるようにするということを試していました(できたのはこれです)。使ってみた感想としては、この仕組みがwebサービスとして使われるようになるかは分かりませんが、C/C++コードで書かれたアプリケーシ…