Skip to content

nna774/piet-automata

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Piet automata

自動piet生成。

Gallery

  • Hello, World! Hello, World!

  • puts 72 puts 72

  • even-or-odd(標準入力から一つ読み取り、それが奇数なら1を出し、そうでないならば0を出す) even-or-odd

中間言語

スタック志向っぽい言語。 一つだけ整数のスタックを持っている。

命令一覧

PUSH n

スタックにnを積む。

PUSH 1 以外を使うと、適当にコード生成しているので、効率が悪い可能性があります。 でもとりあえず動くはずです。

PUSH 'a'
という記法で、対応するasciiコードをpushできるようになりました。 この場合は97がpushされます。

PUSH 0 もできます。

POP

スタックの先頭を捨てる。

ADD

スタックから2つ取り和を積む。

SUB

スタックから2つ取り、2つ目から1つ目を引いた値を積む。

MUL

スタックから2つ取り積を積む。

DIV

スタックから2つ取り、2つ目を1つ目で割った商を積む。

MOD

スタックから2つ取り、2つ目を1つ目で割った余りを積む。

NOT

スタックから1つ取り、それが0ならば1を積み、そうでないならば0を積む。

GREATER

スタックから2つ取り、2つ目のほうが1つ目より大きければ1、そうでないならば0を積む。

DUP

スタックから1つ取り、それを2つ積む。

ROLL

Pietのロールそのまま。 スタックから2つ取り、2つ目分の深さまでのスタックの値を1つ目分だけ回転する。

回転とは、トップの値を指定の深さに落とし、それ以外を一つづつ上げる操作。

1 2 3 4 3 2 -> top の状態からロールを行うと、 結果は 1 3 4 2 -> top となる。

http://www.slideshare.net/KMC_JP/piet-46068527 ここの39-40を見て下さい。

INN

標準入力から数字を一つ読み取り、その値をスタックに積む。

INC

標準入力から一文字読み取り、その文字のUnicode値をスタックに積む。

インクリメントではない。

OUTN

スタックから1つ取り、それを数字として出力する。

OUTC

スタックから1つ取り、そのUnicode値を持つ文字を出力する。

HALT

プログラムを停止させる。

LABEL word

その位置にあとで飛んでこれるラベルをつける。

JEZ word

スタックのから1つ取り、その値がゼロなら、対応するwordを持つLABELにジャンプする。

Jump Equal Zero

JMP word

対応するwordに無条件ジャンプする。

SWAP

スタックの上2つを入れ替えます。

PUSH 2
PUSH 1
ROLL

と同じです。

ブロックサイズの変更

config.jsのsize変数を書き換えてみると、うまくいくとより小さい画像が生成される可能性があります。 書き換えて試してみてください。

Tests/Lisp-like-calc.pas

https://gist.github.com/1995hnagamin/408da3708bf279e2095d

About

create piet image from stack-based pseudo-language. 美しくはない。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published