プチコンまとめWiki (初代/mkII)

投稿プログラム : KEMURIインタプリタ

パンくずリスト

2012年8月23日投稿 / 投稿者 : 麿 / タグ : 投稿プログラム QRコード 初代対応 非実用ツール インタプリタ / 検索用→【麿】

概要

麿です。また難解プログラミング言語のインタプリタを作ってしまいました。
詳しくは今回もWikipediaでも見てください。

仕様

動作は、このページにあるPythonで実装されたインタプリタにだいたい準拠してます。
Wikipediaでは0~255のスタックって言ってる割に、命令~を実行すると負の値になる。どういうことなの・・・。
初代プチコンは、配列Sの要素数を減らせば大丈夫そうです。

KEMURI_PLUS

「チューリング完全。理論上どんな計算でも可能です。そう、KEMURI_PLUSならね。」ということで、これは生憎KEMURI_PLUSではないのでチューリング完全ではないらしいです。
しかし、KEMURI_PLUSの実装は見たことがないです。仕様もよくわからないです。lと*の命令が増えてBrainf*ckのコードを実行できるらしい。Wikipediaだと、lだけで*は載ってないです。どうやってBrainf*ckのコードを出力するのかもわからないです。スタックの中身%8とか? 文字コード? 想像がつかないです。
せっかくだから、KEMURI_PLUSも作りたかったけど、こんな有様で実装できそうもないです。

検索用に

検索用に、バイカウントメルビルさんがやっていた【名前】をつけてみました。
需要ないですが。

QR コード

プチコンmkII 向けの QR コードです。

PRG:MAR_KEM
1/1
qr0.png

プログラムリスト

  1. ’┌──────┐
  2. ’│KEMURI│
  3. ’└──────┘
  4. ’−−− INIT
  5. CLEAR
  6. DIM S(262144) ’STACK
  7. ’−−− MAIN
  8. @MAIN
  9.  COLOR 0
  10.  INPUT ”CODE”;C$  ’CODE
  11.  COLOR 3
  12.  FOR I=0 TO LEN(C$)−1
  13.   T$=MID$(C$,I,1) ’TMP
  14.   IF T$==”^” THEN GOSUB @PXOR
  15.   IF T$==”〜” THEN GOSUB @PNOT
  16.   IF T$==CHR$(34) THEN GOSUB @PDUP
  17.   IF T$==”’” THEN GOSUB @PROT
  18.   IF T$==”`” THEN GOSUB @PHLW
  19.   IF T$==”” THEN GOSUB @PPUT
  20.  NEXT
  21.  COLOR 4
  22.  GOSUB @PSTK
  23. GOTO @MAIN
  24. ’−−− PROCESSING
  25. @PXOR
  26. IF P<2THEN GOSUB @PERR:RETURN
  27. S(P−2)=S(P−1) XOR S(P−2)
  28. S(P−1)=0
  29. S(P−2)=S(P−2)%255
  30. P=P−1
  31. RETURN
  32. ’−−−
  33. @PNOT
  34. IF P<1THEN GOSUB @PERR:RETURN
  35. S(P−1)=NOT S(P−1)
  36. S(P−2)=S(P−2)%255
  37. RETURN
  38. ’−−−
  39. @PDUP
  40. IF P<1THEN GOSUB @PERR:RETURN
  41. IF P<262143THEN GOSUB @PERR:RETURN
  42. S(P)=S(P−1)
  43. P=P+1
  44. RETURN
  45. ’−−−
  46. @PROT
  47. IF P<1THEN GOSUB @PERR:RETURN
  48. A=S(P−1)
  49. S(P−1)=S(P−2)
  50. S(P−2)=S(P−3)
  51. S(P−3)=A
  52. RETURN
  53. ’−−−
  54. @PHLW ’HELLO WORLD
  55. IF P>262131THEN GOSUB @PERR:RETURN
  56. RESTORE @D
  57. A=P ’POINTER
  58. FOR P=P TO A+12
  59.  READ S(P)
  60. NEXT
  61. RETURN
  62. @D
  63. DATA 33,100,108,114,111,119
  64. DATA 32,44,111,108,108,101,72
  65. ’−−−
  66. @PPUT
  67. IF P<1THEN GOSUB @PERR:RETURN
  68. O$=”” ’OUTPUT
  69. FOR P=P TO 1 STEP −1
  70.  IF S(P−1)>=0 AND S(P−1)<=255 THEN O$=O$+CHR$(S(P−1))
  71.  IF S(P−1)<0 OR S(P−1)>255 THEN GOSUB @PERR:RETURN
  72.  S(P−1)=0
  73. NEXT
  74. ?O$
  75. RETURN
  76. ’−−− ERROR
  77. @PERR
  78. COLOR 13:?”ERROR!”:COLOR 0
  79. BEEP 2:I=262144
  80. RETURN
  81. ’−−− PUT STACK
  82. @PSTK
  83. ?”STACK ”;
  84. FOR I=P−1 TO 0 STEP −1
  85.  ?S(I);
  86.  IF I THEN ?”,”;
  87. NEXT:?
  88. RETURN

CHECKER FLAG (ひとことコメント)

この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)

  • 名無しさん : 「Hello, world!」XORで組み合わせることにより、任意のbrainfuckコードが出力出来て、それを実行できるKEMURI_PLUSだからこそチューリング完全って意味だと思うよ (2012/08/25 (土) 06:50:38)
  • 麿 : ↑なるほど。でもBrainfuckコードをどうやって出力するんだろ。文字コード?あと、*命令もそれで使うとか書いてあったけど、どんな効果なんだろ。仕様が全くわからない (2012/08/25 (土) 11:09:46)

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.025 秒 | このページの最終更新 : 2012/09/20 (木) 21:31:57 (2586d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30