興味ない方はスルーで・・・
あるプログラムのサンプルソース
tc.txt
整数 i 実数 d,dd,d2 出力("H W!\n") 繰返 (i=0;i<25;i++){ d=正弦(3.14159/180*i) dd=余弦(3.14159/180*i) d2=平方根(i) 出力("%d deg:sin->:%f :cos->:%f :sqrt->:%f\n",i*5,d,dd,d2) }
プログラムわからない人でも何となくわかるんじゃないでしょうか?
何しろキーワード日本語ですし・・・
でもこんなプログラム言語は世の中に存在しません・・・
なら、自分で作ってしまいましょう
10分で作れます
nchl というインタプリタ(自作)
$ ls -l ./nchl -rwxr-xr-x 1 xxxxx なし 318 12月 18 16:33 ./nchl
僅か 318byte です!
では、実行してみましょう
$ ./nchl ./tc.txt H W! 0 deg:sin->:0.000000 :cos->:1.000000 :sqrt->:0.000000 5 deg:sin->:0.017452 :cos->:0.999848 :sqrt->:1.000000 10 deg:sin->:0.034899 :cos->:0.999391 :sqrt->:1.414214 15 deg:sin->:0.052336 :cos->:0.998630 :sqrt->:1.732051 20 deg:sin->:0.069756 :cos->:0.997564 :sqrt->:2.000000 25 deg:sin->:0.087156 :cos->:0.996195 :sqrt->:2.236068 30 deg:sin->:0.104528 :cos->:0.994522 :sqrt->:2.449490 35 deg:sin->:0.121869 :cos->:0.992546 :sqrt->:2.645751 40 deg:sin->:0.139173 :cos->:0.990268 :sqrt->:2.828427 45 deg:sin->:0.156434 :cos->:0.987688 :sqrt->:3.000000 50 deg:sin->:0.173648 :cos->:0.984808 :sqrt->:3.162278 55 deg:sin->:0.190809 :cos->:0.981627 :sqrt->:3.316625 60 deg:sin->:0.207912 :cos->:0.978148 :sqrt->:3.464102 65 deg:sin->:0.224951 :cos->:0.974370 :sqrt->:3.605551 70 deg:sin->:0.241922 :cos->:0.970296 :sqrt->:3.741657 75 deg:sin->:0.258819 :cos->:0.965926 :sqrt->:3.872983 80 deg:sin->:0.275637 :cos->:0.961262 :sqrt->:4.000000 85 deg:sin->:0.292371 :cos->:0.956305 :sqrt->:4.123106 90 deg:sin->:0.309017 :cos->:0.951057 :sqrt->:4.242641 95 deg:sin->:0.325568 :cos->:0.945519 :sqrt->:4.358899 100 deg:sin->:0.342020 :cos->:0.939693 :sqrt->:4.472136 105 deg:sin->:0.358368 :cos->:0.933581 :sqrt->:4.582576 110 deg:sin->:0.374606 :cos->:0.927184 :sqrt->:4.690416 115 deg:sin->:0.390731 :cos->:0.920505 :sqrt->:4.795832 120 deg:sin->:0.406736 :cos->:0.913546 :sqrt->:4.898979
無事に実行できました
三角関数もきちんと計算できてます
凄いですね! 僅か318byteでここまでできます
種明かしです
nchl はシェルスクリプトなんで、中身を見てみましょう
#!/bin/bash cat $1 |sed -e 's/出力/printf/g;s/整数/int/g;s/繰返/for/g;s/実数/double/g;s/正弦/sin/g;s/余弦/cos/g;s/平方根/sqrt/g;s/$/;/g' >./tmp.inc cat << EOF >tmp.c #include <stdio.h> #include <math.h> int main(void) { #include "tmp.inc" } EOF gcc ./tmp.c ./a rm ./a.exe ./tmp.c ./tmp.inc
要は、C言語のテンプレートを用意しといて、sedで日本語独自キーワードをC言語のキーワードに置換したものをぶち込んで、gccでコンパイルして、実行してるだけです
シストレの自作システムはもう少し複雑(awk m4も使用)ですが、基本は同じです
なんちゃって独自言語自作は楽しいです