Talk:ThaM

From Esolang
Jump to navigation Jump to search

Commented BF Interpreter

1
|Get input, null terminated|
[I^B]
[
  |If the commands ascii value minus 43 doesn't equal 0(so the number isn't 43), add 43 back and check the next chr the same way|
  43-(43+
  44-(44+
  45-(45+
  46-(46+
  60-(60+
  91-(91+
  |If its not a BF operator pop it, if it is chr 33, pop it still and end the loop|
  93-(B!B)
  |If it is one of the chrs matched above, put it onto the source stack "s" as a num from 1-7|
  (7^s))
  (6^s))
  (5^s))
  (4^s))
  (3^s))
  (2^s))
  (1^s)
]
|Take the first command off of the source stack "s"|
s^B
[
  |Check which command it is|
  1-(1+
  2-(2+
  3-(3+
  4-(4+
  5-(5+
  6-(6+
  |If it isn't ']', there was a bug in the interpreter, so output "wtf?" and end the loop by putting 0 on the source stack "s"| 
  7-(0,063,102,116,119[B^O]0B^s)(
    |If it is ] and the current bf cell is not 0 then...|
    c^B1+B^cr^B^B(
      |Get the last executed command from the stack e|
      e^B
      [
        |If the last executed command isn't a '[', just push it back on the source stack "s"|
        6-(6+B^s)(
          |If it is a [, check if its the matching one to our open bracket, if it is end this loop, else continue looking|
          o^B1-B^B^oc^B^BB^c-(6B^e0)(6B^s)
        )
      ]
    )))
  |If the command is a '[', increase the [ count|
  (o^B1+B^o6^e))
  |If the command is '>', move the data from the left data stack "l" to the right data stack "r", making the top of the right data stack the current BF cell|
  (l^r5^e))
  |If the command is '.', output the chr on the top of right data stack "r"|
  (r^BO4^e))
  |If the command is '-', decrease the top of right data stack "r"|
  (r^B1-B^r3^e))
  |If the command is ',', get a chr from input and replace the top of right data stack "r"|
  (I^Br^B!B^r2^e))
  |If the command is '+', increase the top of the right data stack "r"|
  (r^B1+B^r1^e)
  |Get the next command from source stack "s"|
  s^B
]=

poiuy_qwert 19:22, 9 Sep 2006 (UTC)

Modified to match updated spec. --MizardX 02:14, 29 November 2008 (UTC)