プログラミング言語を作ってみた.
たぶん「難解プログラミング言語」に分類されるのかな.
でも単にアセンブリを置き換えただけに近いww
使える文字は + - * / | だけです.
簡単でしょ?
この言語の特徴の一つとして,構文エラーがありませんww
どんなにでたらめに書こうが構文として解釈され,エラー無く実行されます.
・・・たぶんw
次のプログラムは1〜255の数字を足して出力します.
*/********
+/*
+/*
++++
*+|*
+*+
*+
+*
++
*/*
*+
****
+*|*
++
*/****
*/***
***
*/**
*/*
***
*+
-*
/*
まぁこの言語自体の製作時間が半日も無いので大分適当ですがww
コンパイラなんて数時間ですしw
# C++で300行強
なんでこんな言語を作ったかというと,+-*/|以外はすべて無視されるのでゆのin languageが簡単だ!ってだけですw
しかもまだ文字表示できないwww
簡単な言語説明(仕組みは簡単です).
●各行の一番左の文字は特殊
* スタックにプッシュ
+ キューにエンキュー
- 条件分岐(スタックを3回ポップ)
/ 表示
●一番左以外に単体で来た場合
/ スタックとキューをポップして値の小さいほうが使われる
- 上に逆(大きいほう)
* スタックをポップした値
+ キューをデキューした値
●それ以外は計算
r = +-*/
rr = r + r
rrr = r - r
R = rrrrrrr....
S = rrrrrrr....
T = rrrrrrr....
# ただし隣接するR S Tのrは同じではない
RS = R+S
RST = S - T (Rは無視)
● 条件分岐
- r
int condition = r
int line_true = スタックポップ
int line_false = スタックポップ
if(condition)
line_true行へジャンプ
else
line_false行へジャンプ
# 空行無視
●数字表記
/rrrrr.... は数字
/* = 1
/- = 0001
/+ = 00000001
例:/*-+*は2進数で10001000000011
この馬鹿な表記方法のせいで
4は
r/**//*/
0は
r/*//*//*
と書く必要がある.
正直0のこの書き方は今気づいたww
r/*
r/*
rrrr
って書いてたよ(書いてある).
再帰でBNFみたいに(違うかも)実装したので,こういう記法が勝手にできるようになってるって,なんか感動する.
また/で数字を終わる.
*/*/*
は1+ポップをプッシュ
●区切り
は式を区切る |
ただし一番左にある|は特殊
*+*|*
n = ポップ
プッシュ n
エンキュー n
プッシュ n
-|r
n = ポップ
スタックとキューをポップして値の大きいほうにnをプッシュ(エンキュー)
/|r
上の逆(小さいほう)
**|/*|/**
1をプッシュx2
3をプッシュx2
これくらいかな.
疲れた.