2012年8月23日投稿 / 投稿者 : 麿 / タグ : 投稿プログラム QRコード 初代対応 非実用ツール インタプリタ / 検索用→【麿】
麿です。また難解プログラミング言語のインタプリタを作ってしまいました。
詳しくは今回もWikipediaでも見てください。
動作は、このページにあるPythonで実装されたインタプリタにだいたい準拠してます。
Wikipediaでは0~255のスタックって言ってる割に、命令~を実行すると負の値になる。どういうことなの・・・。
初代プチコンは、配列Sの要素数を減らせば大丈夫そうです。
「チューリング完全。理論上どんな計算でも可能です。そう、KEMURI_PLUSならね。」ということで、これは生憎KEMURI_PLUSではないのでチューリング完全ではないらしいです。
しかし、KEMURI_PLUSの実装は見たことがないです。仕様もよくわからないです。lと*の命令が増えてBrainf*ckのコードを実行できるらしい。Wikipediaだと、lだけで*は載ってないです。どうやってBrainf*ckのコードを出力するのかもわからないです。スタックの中身%8とか? 文字コード? 想像がつかないです。
せっかくだから、KEMURI_PLUSも作りたかったけど、こんな有様で実装できそうもないです。
検索用に、バイカウントメルビルさんがやっていた【名前】をつけてみました。
需要ないですが。
プチコンmkII 向けの QR コードです。
- ’┌──────┐
- ’│KEMURI│
- ’└──────┘
- ’--- INIT
- CLEAR
- DIM S(262144) ’STACK
- ’--- MAIN
- @MAIN
- COLOR 0
- INPUT ”CODE”;C$ ’CODE
- COLOR 3
- FOR I=0 TO LEN(C$)-1
- T$=MID$(C$,I,1) ’TMP
- IF T$==”^” THEN GOSUB @PXOR
- IF T$==”~” THEN GOSUB @PNOT
- IF T$==CHR$(34) THEN GOSUB @PDUP
- IF T$==”’” THEN GOSUB @PROT
- IF T$==”`” THEN GOSUB @PHLW
- IF T$==”¦” THEN GOSUB @PPUT
- NEXT
- COLOR 4
- GOSUB @PSTK
- GOTO @MAIN
- ’--- PROCESSING
- @PXOR
- IF P<2THEN GOSUB @PERR:RETURN
- S(P-2)=S(P-1) XOR S(P-2)
- S(P-1)=0
- S(P-2)=S(P-2)%255
- P=P-1
- RETURN
- ’---
- @PNOT
- IF P<1THEN GOSUB @PERR:RETURN
- S(P-1)=NOT S(P-1)
- S(P-2)=S(P-2)%255
- RETURN
- ’---
- @PDUP
- IF P<1THEN GOSUB @PERR:RETURN
- IF P<262143THEN GOSUB @PERR:RETURN
- S(P)=S(P-1)
- P=P+1
- RETURN
- ’---
- @PROT
- IF P<1THEN GOSUB @PERR:RETURN
- A=S(P-1)
- S(P-1)=S(P-2)
- S(P-2)=S(P-3)
- S(P-3)=A
- RETURN
- ’---
- @PHLW ’HELLO WORLD
- IF P>262131THEN GOSUB @PERR:RETURN
- RESTORE @D
- A=P ’POINTER
- FOR P=P TO A+12
- READ S(P)
- NEXT
- RETURN
- @D
- DATA 33,100,108,114,111,119
- DATA 32,44,111,108,108,101,72
- ’---
- @PPUT
- IF P<1THEN GOSUB @PERR:RETURN
- O$=”” ’OUTPUT
- FOR P=P TO 1 STEP -1
- IF S(P-1)>=0 AND S(P-1)<=255 THEN O$=O$+CHR$(S(P-1))
- IF S(P-1)<0 OR S(P-1)>255 THEN GOSUB @PERR:RETURN
- S(P-1)=0
- NEXT
- ?O$
- RETURN
- ’--- ERROR
- @PERR
- COLOR 13:?”ERROR!”:COLOR 0
- BEEP 2:I=262144
- RETURN
- ’--- PUT STACK
- @PSTK
- ?”STACK ”;
- FOR I=P-1 TO 0 STEP -1
- ?S(I);
- IF I THEN ?”,”;
- NEXT:?
- RETURN
この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)
表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.121 秒 | このページの最終更新 : 2022/09/20 (火) 12:43:56 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30