ni li toki nasa pi ilo nanpa. sina sitelen e ni kepeken nanpa pi toki pona.
toki ponaという人工言語の、"数"の表し方を題材にした難解プログラミング言語です。
自作Esolang文化布教のために作ったもので、初心者が勢いだけで実装できる言語仕様を意識しました。
もちろんBrainf*ckの方言(実質的なトランスパイル言語)です。
jar版を利用して実行する場合、JRE SE 21以降が必要です。
ソースコードをコンパイルする場合は、JDK SE 14以降が必要です。
(switch式周りの構文を古いものに書き換えれば13以前でも動くかもしれません。要検証)
Releasesからjar版をダウンロードするか、
src/java内のソースコードを適宜コンパイルして下さい。
以下、カレントディレクトリにjar版(nanpa-unpa.jar)が置かれている前提で操作例を挙げます。
ソースコードからコンパイルした方などはよしなに読み替えて下さい。
nanpa unpaのソースコード oke.nanpaunpa を実行する例:
$ java -cp nanpa-unpa.jar com.nanpaunpa.NanpaUnpa oke.nanpaunpa
Brainf*ckのソースコード fuga.bf をnanpa unpaに変換して pijo.nanpaunpa に書き込む例:
$ java -cp nanpa-unpa.jar com.nanpaunpa.NUTranspiler fuga.bf pijo.nanpaunpa
なお、nanpa unpaからBrainf*ckへの変換には対応しておりません。実装するのが面倒なので
Brainf*ckの構文を基本とし、各命令をtoki ponaの数によって番号で記述します。
数を表すキーワード列は、1命令ごとに末尾の.
で区切ります(下記Numbers参照)。
toki ponaには、明確に数を表す単語が以下の3つしか存在しません。
wan
-> 1tu
-> 2luka
-> 5
上記のキーワードを単純に並べ、各々が表す数の合計を数えます。
tu wan.
-> 3 -><
in BFwan tu.
やwan wan wan.
も可(以下別表記は省略)
luka wan.
-> 6 ->.
in BFluka tu tu.
-> 9 -> <Syntax Error>
空白類は必須ではありませんが、あった方が可読性が高く、何よりtoki ponaらしいでしょう。
命令番号、Brainf*ckでの記述、実行される操作の概要の対応表は以下の通りです。
Number | BF Char | Instruction |
---|---|---|
1 | + | increment |
2 | - | decrement |
3 | < | move left |
4 | > | move right |
5 | , | input |
6 | . | output |
7 | [ | loop start |
8 | ] | loop end |
samplesディレクトリ内の toki.nanpaunpa は、Hello, world!
という英文を(僕なりに)toki ponaへ翻訳した以下の文字列を出力します。
toki, ali o!
「初心者が勢いだけで作れる」というコンセプトのために、僕の拙いコーディング技術をそのまま残している部分が多々あります。それは仕様です。
基本的に実装難易度の上がるような修正・追加は行わない予定ですので、バグ修正などを除くissueやPRにはお応えできない可能性が高いです。
ご厚意はありがたく受け取らせて頂きますが、どうかご了承下さい。