User:999eagle/Brainfuck Interpreter
Jump to navigation
Jump to search
This is an interpreter for brainfuck written in LOLcode. It was tested with the lci interpreter. Due to limitations of LOLcode this interpreter supports input and output only for chars with ASCII-Codes between 32 and 127 and only output for the new line character (ASCII 10). All other characters are output as " " and input as 32.
#!lci HAI 1.3 CAN HAS STDIO? CAN HAS STRING? O HAI IM charlib BTW 0 10 20 30 33 35 40 50 BTW | | | | | | | | I HAS A mapping ITZ " :) !:"#$%&'()*+,-./012" BTW | | | | | | mapping R SMOOSH mapping AN "3456789::;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd" MKAY mapping R SMOOSH mapping AN "efghijklmnopqrstuvwxyz{|}~" MKAY HOW IZ I gettinCharFrom YR asciiCode DIFFRINT 126 AN BIGGR OF 126 AN asciiCode, O RLY? YA RLY, asciiCode R 32 OIC DIFFRINT 0 AN SMALLR OF 0 AN asciiCode, O RLY? YA RLY, asciiCode R 32 OIC FOUND YR I IZ STRING'Z AT YR ME'Z mapping AN YR asciiCode MKAY IF U SAY SO HOW IZ I gettingAsciiCodeFrom YR char BOTH SAEM char AN " ", O RLY? YA RLY, FOUND YR 32 OIC IM IN YR loop UPPIN YR var TIL BOTH SAEM var AN 127 I HAS A c ITZ STRING IZ AT YR ME'Z mapping AN YR var MKAY BOTH SAEM c AN char, O RLY? YA RLY, FOUND YR var OIC IM OUTTA YR loop FOUND YR 32 IF U SAY SO KTHX O HAI IM pile I HAS A length ITZ 0 I HAS A max ITZ -1 HOW IZ I pushin YR item DIFFRINT ME'Z max AN BIGGR OF ME'Z max AN ME'Z length, O RLY? YA RLY, ME HAS A SRS ME'Z length ITZ item, ME'Z max R SUM OF ME'Z max AN 1 NO WAI, ME'Z SRS ME'Z length R item OIC ME'Z length R SUM OF ME'Z length AN 1 IF U SAY SO HOW IZ I popin DIFFRINT ME'Z length AN 0, O RLY? YA RLY ME'Z length R DIFF OF ME'Z length AN 1 I HAS A item ITZ ME'Z SRS ME'Z length ME'Z SRS ME'Z length R NOOB FOUND YR item OIC IF U SAY SO HOW IZ I gettinLen FOUND YR ME'Z length IF U SAY SO KTHX I HAS A fielnaem ITZ A YARN I HAS A fiel ITZ A NOOB IM IN YR loop VISIBLE "Enter fielnaem: "! GIMMEH fielnaem fiel R I IZ STDIO'Z OPEN YR fielnaem AN YR "r" MKAY I IZ STDIO'Z DIAF YR fiel MKAY, O RLY? YA RLY VISIBLE "Oh noes! Fiel not fund!" I IZ STDIO'Z CLOSE YR fiel MKAY NO WAI GTFO OIC IM OUTTA YR loop I HAS A data ITZ I IZ STDIO'Z LUK YR fiel AN YR 1024 MKAY I HAS A len ITZ I IZ STRING'Z LEN YR data MKAY I IZ STDIO'Z CLOSE YR fiel MKAY BTW VISIBLE "Len iz " AN len VISIBLE "Data iz " AN data I HAS A tape ITZ A BUKKIT I HAS A pos ITZ 0 I HAS A min ITZ 0 I HAS A max ITZ 0 tape HAS A SRS pos ITZ 0 I HAS A looppile ITZ LIEK A pile I HAS A jumpin ITZ -1 IM IN YR loop UPPIN YR var TIL BOTH SAEM var AN len I HAS A char ITZ I IZ STRING'Z AT YR data AN YR var MKAY BTW VISIBLE char BOTH SAEM jumpin AN -1, O RLY? BTW if jumpin=-1 execute normally YA RLY char, WTF? OMG ">" pos R SUM OF pos AN 1 DIFFRINT max AN BIGGR OF pos AN max, O RLY? YA RLY tape HAS A SRS pos ITZ 0 max R pos GTFO OIC GTFO OMG "<" pos R DIFF OF pos AN 1 DIFFRINT min AN SMALLR OF pos AN min, O RLY? YA RLY tape HAS A SRS pos ITZ 0 min R pos GTFO OIC GTFO OMG "+" tape'Z SRS pos R SUM OF tape'Z SRS pos AN 1 GTFO OMG "-" tape'Z SRS pos R DIFF OF tape'Z SRS pos AN 1 GTFO OMG "," I HAS A temp ITZ A YARN GIMMEH temp temp R STRING IZ AT YR temp AN YR 0 MKAY tape'Z SRS pos R charlib IZ gettingAsciiCodeFrom YR temp MKAY GTFO OMG "." VISIBLE charlib IZ gettinCharFrom YR tape'Z SRS pos MKAY! GTFO OMG "[" DIFFRINT tape'Z SRS pos AN 0, O RLY? YA RLY BTW VISIBLE "loop entered, cell is " AN tape'Z SRS pos looppile IZ pushin YR var MKAY NO WAI BTW VISIBLE "jump over loop" jumpin R 0 OIC GTFO OMG "]" DIFFRINT tape'Z SRS pos AN 0, O RLY? YA RLY BTW VISIBLE "jump to loop start" var R DIFF OF looppile IZ popin MKAY AN 1 NO WAI BTW VISIBLE "loop left" looppile IZ popin MKAY OIC GTFO OIC NO WAI BTW if jumpin > -1 jump to ] char, WTF? OMG "[" jumpin R SUM OF jumpin AN 1 GTFO OMG "]" jumpin R DIFF OF jumpin AN 1 GTFO OIC OIC IM OUTTA YR loop VISIBLE "done, printing tape" IM IN YR loop UPPIN YR var TIL BOTH SAEM DIFF OF max AN min AN var VISIBLE tape'Z SRS SUM OF min AN var AN "|"! IM OUTTA YR loop VISIBLE tape'Z SRS max KTHXBYE