Whitespace処理系つくったの忘れてた。

かんたん言語Whitespaceの処理系つくったの忘れてた。
http://konbu.s13.xrea.com/lib/lang/c/ws_20080503.tar.bz2
Whitespaceっていう言語はForthライク(といって良いと思うたぶん)な小さなスタック型言語。パーサとかもとても簡単に書けるし、brainf*ckなどの処理系をつくるのに飽きた人なんかにおすすめですね。
makeすれば普通に動くんじゃないかな。strndupの無い環境だとそこ変えんと駄目。

% make
perl parsegen.pl wsparse.def >gencode.c
gcc -Wall   -c -o parse.o parse.c
parse.c: In function ‘read_String’:
parse.c:80: warning: implicit declaration of function ‘strndup’
parse.c:80: warning: incompatible implicit declaration of built-in function ‘strndup’
gcc -Wall   -c -o vm.o vm.c
gcc -Wall   -c -o wspace.o wspace.c
gcc parse.o vm.o wspace.o -Wall -o wspace

警告でてるけど気にしない。よくわからんけどstrndupの警告がまったくとれない。string.hもちゃんと読んでるというのに。 id:masa_edwさんの指摘でわかりましたけど、strndupはGNU拡張なのでstring.hをインクルードするときにマクロ_GNU_SOURCEが有効になってないといけませんね。具体的には#include の前に#define _GNU_SOURCEするか、コンパイル時に-D_GNU_SOURCEとする。

% ./wspace examples/hworld.ws
Hello, world of spaces!

なんかまあ実行できる。

test