Hatena::ブログ(Diary)

GFSの興味ごととか このページをアンテナに追加 RSSフィード

July 23(Wed), 2008

[] プログラミング言語を作ってみた.


たぶん「難解プログラミング言語」に分類されるのかな.

でも単にアセンブリを置き換えただけに近い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


これくらいかな.

疲れた.

なまえなまえ 2008/12/06 12:23 それなんてBrainfuck

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/graighle/20080723/1216833429