Talk:ThaM

From Esolang

Jump to: navigation, search

[edit] 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)

Personal tools