10
難解な言語のジャンパー用のインタープリターを書く
難解な言語ジャンパーを考えました。後でその理由がわかります。 これは、バイトをセルとして使用するランダムアクセスメモリで動作します。RAMのインデックスはゼロで、最初はゼロで埋められています。 負のインデックスを持つセルにアクセスしようとすると、エラーが表示され、プログラムが終了します。 最後よりも大きいインデックスで読み取りを試みると、ゼロが返されます。 最後よりも大きいインデックスで書き込みを試みる場合、RAMを1024の倍数に増やし、新しいセルをゼロで埋める必要があります(技術的には、RAMを1024の倍数に増やすことはできません。理由はパフォーマンスが向上したためです。 1024の倍数にはできません)。 プログラムには、最初はゼロであるRAM内のセルへのポインターもあります プログラムが実行を開始すると、入力文字列のプロンプトが表示されます(またはコマンドライン引数から入力を取得します)。入力文字列にヌル文字(ゼロバイト)を含めることはできません。次に、ゼロインデックスから始まる入力文字列がRAMに書き込まれます。 プログラムが終了すると、プログラム出力を含むボックスが表示されます-ゼロインデックスから最初のゼロバイトを除くRAMの内容が表示されます さて、最も興味深い部分は構文です。 プログラムは、コマンド(単項演算子-接頭辞)とその引数で構成されます。コマンドと引数は、スペースまたは改行で区切ることができますが、必須ではありません。ただし、引数内のスペースは無効です。たとえば、# 2 = 4有効ですが有効で# 2 = 4 4はありません。 プログラム間でコメントを付けることができます()。コメントはネストできません。たとえば、(abc(def)ghi)コメントは(abc(def)です。コメントはどこにでも配置できます。 #123 RAMポインターを123(任意の正の10進整数またはゼロ)に設定します。 >123 RAMポインターを123(任意の正の10進整数)ずつ増やします。 <123 RAMポインターを123(任意の正の10進整数)減らします。 =123 現在のセルに123(符号なし8ビット10進整数)を書き込みます。 +123 123(符号なし8ビット10進整数)を現在のセル(モジュロ256)に追加します。 -123 現在のセル(モジュロ256)から123(符号なし8ビット10進整数)を減算します。 :123-"goto"-コマンド番号123に移動します(最初は0です)。プログラムのフローはgotoでのみ制御できます-ジャンプする必要があるため、この言語をJumperと呼ぶことにしました。 引数が欠落している場合- ><+-コマンドの場合は1、コマンドの場合は0 と考えて#=:ください。 また、コマンド修飾子があります- ?(コマンドのプレフィックス)、現在のセルがゼロでない場合にのみ次のコマンドを実行し、そうでない場合はそのコマンドをスキップします。任意のコマンドに適用できます。 たとえば、?:17-は、現在のセルがゼロでない場合、コマンド17に進みます。 プログラムが無効であるか、実行時にエラーが発生した場合、メッセージ「エラー」を表示できます。これはCodeGolfであるため、このような短いメッセージは問題ありません。 あなたのタスク この言語の最短のインタプリタを作成します。 いくつかのテストプログラム (prints "Hello world!" regardless of input) =72>=101>=108>=108>=111>=32>=119>=111>=114>=108>=100>=33>= (appends …