ご利用のブラウザはサポートされていません

このサービスを利用するためには、WebAssemblyが動作する環境が必要です。
最新版のGoogle Chrome、FireFox、Safari、またはMicrosoft Edgeをご利用ください。

  • コードを消す
  • サンプルコード
    • Hello, Pikachu!
    • フィボナッチ数(再帰)
    • ハノイの塔
    • 数当てゲーム
    • 今何時?
  • ドキュメントを見る
  • 実行結果を消す

Pikkal

概要

 Pikkalは、ピカチュウのために開発されたプログラム言語です。

言語について

 Pikkalは、「ピ」「ピカ」「ピカチュ」の3種類のトークンを使用してプログラムを記述するプログラム言語、およびそれを実行するためのスタックベースの仮想マシンです。これら3種類の組み合わせによって様々な命令を記述することができます。Pikkalでは、先述の3種類のトークン以外はすべて無視されます。また、一部の命令では引数を取ります。引数は、命令の後に続けて記述します。

命令一覧

スタック操作
命令
引数
説明
ピカ ピカ
指定された数値をスタックのトップに積みます
ピカ ピカチュ ピカ
-
スタックのトップを複製します
ピカ ピ ピカ
スタックの指定された位置の要素を複製し、トップに積みます
ピカ ピカチュ ピ
-
スタックのトップと、その次の要素を入れ替えます
ピカ ピカチュ ピカチュ
-
スタックのトップの要素を破棄します
ピカ ピ ピカチュ
スタックの2番目から、指定された数の要素を削除します
算術演算
命令
引数
説明
ピ ピカ ピカ ピカ
-
スタックのトップ2要素を加算し、結果をトップに積みます
ピ ピカ ピカ ピ
-
スタックのトップ2要素を減算し、結果をトップに積みます
ピ ピカ ピカ ピカチュ
-
スタックのトップ2要素を乗算し、結果をトップに積みます
ピ ピカ ピ ピカ
-
スタックのトップ2要素を除算し、結果をトップに積みます
ピ ピカ ピ ピ
-
スタックのトップ2要素の剰余を計算し、結果をトップに積みます
組み込み命令
命令
引数
説明
ピ ピカ ピカチュ ピカ
-
[0,スタックのトップ) の範囲の乱数を生成し、スタックのトップに積みます
ピ ピカ ピカチュ ピ
-
現在時刻のUnix時間をスタックのトップに積みます
ヒープアクセス
命令
引数
説明
ピ ピ ピカ
-
スタックの2番目の値をスタックのトップに入っているアドレスに保存します
ピ ピ ピ
-
スタックのトップに入っているアドレスから値を取得して、スタックのトップを取得した値に置き換えます
フロー制御
命令
引数
説明
ピカチュ ピカ ピカ
ラベルを定義します
ピカチュ ピカ ピ
サブルーチンを呼び出します
ピカチュ ピカ ピカチュ
無条件でラベルにジャンプします
ピカチュ ピ ピカ
スタックのトップが0のとき、ラベルにジャンプします
ピカチュ ピ ピ
スタックのトップが負の値(v < 0)のとき、ラベルにジャンプします
ピカチュ ピ ピカチュ
-
サブルーチンから呼び出し元へ制御を返します
ピカチュ ピカチュ ピカチュ
-
プログラムを終了します
入出力
命令
引数
説明
ピ ピカチュ ピカ ピカ
-
スタックのトップの値を文字列(UTF-16)として出力します
ピ ピカチュ ピカ ピ
-
スタックのトップの値を出力します
ピ ピカチュ ピ ピカ
-
文字を読み込み、スタックのトップに入っているアドレスに保存します
ピ ピカチュ ピ ピ
-
数値を読み込み、スタックのトップに入っているアドレスに保存します

数値とラベルの表現

数値

 Pikkalにおける数値は、以下のようなフォーマットで表現されます。

[符号部][数値部]ピカチュ

 符号部では、「ピカ」が正(+)、「ピ」が負(-)を表現します。数値部では、「ピカ」を0、「ピ」を1として、31ビットの整数として表現します。2の補数表現ではないことに注意してください。

ピカ ピピカピピカ ピカチュ = +1010 = 10

ラベル

 ラベルは以下のようなフォーマットで表現されます。 

[ラベル]ピカチュ

 ラベルは「ピカ」と「ピ」の組み合わせで表現します。

その他

 ご意見ご要望は @giemsa_orz まで。面白いプログラムができたらぜひご連絡ください!
エンジニア向けポエムはこちら