Implement emojifuck
This commit is contained in:
parent
ea936cba8e
commit
fc08f05fea
@ -1,33 +0,0 @@
|
|||||||
+++++ +++ Set Cell #0 to 8
|
|
||||||
[
|
|
||||||
>++++ Add 4 to Cell #1; this will always set Cell #1 to 4
|
|
||||||
[ as the cell will be cleared by the loop
|
|
||||||
>++ Add 4*2 to Cell #2
|
|
||||||
>+++ Add 4*3 to Cell #3
|
|
||||||
>+++ Add 4*3 to Cell #4
|
|
||||||
>+ Add 4 to Cell #5
|
|
||||||
<<<<- Decrement the loop counter in Cell #1
|
|
||||||
] Loop till Cell #1 is zero
|
|
||||||
>+ Add 1 to Cell #2
|
|
||||||
>+ Add 1 to Cell #3
|
|
||||||
>- Subtract 1 from Cell #4
|
|
||||||
>>+ Add 1 to Cell #6
|
|
||||||
[<] Move back to the first zero cell you find; this will
|
|
||||||
be Cell #1 which was cleared by the previous loop
|
|
||||||
<- Decrement the loop Counter in Cell #0
|
|
||||||
] Loop till Cell #0 is zero
|
|
||||||
|
|
||||||
The result of this is:
|
|
||||||
Cell No : 0 1 2 3 4 5 6
|
|
||||||
Contents: 0 0 72 104 88 32 8
|
|
||||||
Pointer : ^
|
|
||||||
|
|
||||||
>>. Cell #2 has value 72 which is 'H'
|
|
||||||
>---. Subtract 3 from Cell #3 to get 101 which is 'e'
|
|
||||||
+++++ ++..+++. Likewise for 'llo' from Cell #3
|
|
||||||
>>. Cell #5 is 32 for the space
|
|
||||||
<-. Subtract 1 from Cell #4 for 87 to give a 'W'
|
|
||||||
<. Cell #3 was set to 'o' from the end of 'Hello'
|
|
||||||
+++.----- -.----- ---. Cell #3 for 'rl' and 'd'
|
|
||||||
>>+. Add 1 to Cell #5 gives us an exclamation point
|
|
||||||
>++. And finally a newline from Cell #6
|
|
||||||
1
examples/helloworld.ef
Normal file
1
examples/helloworld.ef
Normal file
@ -0,0 +1 @@
|
|||||||
|
📈📈📈📈📈📈📈📈🌔🔜📈📈📈📈🌔🔜📈📈🔜📈📈📈🔜📈📈📈🔜📈🔙🔙🔙🔙📉🌖🔜📈🔜📈🔜📉🔜🔜📈🌔🔙🌖🔙📉🌖🔜🔜📤🔜📉📉📉📤📈📈📈📈📈📈📈📤📤📈📈📈📤🔜🔜📤🔙📉📤🔙📤📈📈📈📤📉📉📉📉📉📉📤📉📉📉📉📉📉📉📉📤🔜🔜📈📤🔜📈📈📤
|
||||||
@ -1,6 +1,5 @@
|
|||||||
-- Branfuck interpreter in Haskell: beause why not
|
-- Emojifuck interpreter in Haskell: beause why not
|
||||||
-- author: ianonavy
|
-- author: ianonavy
|
||||||
-- Based on https://github.com/quchen/articles/blob/master/write_yourself_a_brainfuck.md
|
|
||||||
|
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.List
|
import Data.List
|
||||||
@ -22,16 +21,17 @@ data BFSource = BFSource [BrainfuckCommand]
|
|||||||
|
|
||||||
instance Show BFSource where
|
instance Show BFSource where
|
||||||
show (BFSource bfs) = map bfToChar bfs where
|
show (BFSource bfs) = map bfToChar bfs where
|
||||||
bfToChar GoRight = '>'
|
bfToChar GoRight = '\128284'
|
||||||
bfToChar GoLeft = '<'
|
bfToChar GoLeft = '\128281'
|
||||||
bfToChar Increment = '+'
|
bfToChar Increment = '\128200'
|
||||||
bfToChar Decrement = '-'
|
bfToChar Decrement = '\128201'
|
||||||
bfToChar Print = '.'
|
bfToChar Print = '\128229'
|
||||||
bfToChar Read = ','
|
bfToChar Read = '\128228'
|
||||||
bfToChar LoopL = '['
|
bfToChar LoopL = '\127764'
|
||||||
bfToChar LoopR = ']'
|
bfToChar LoopR = '\127766'
|
||||||
bfToChar (Comment c) = c
|
|
||||||
|
|
||||||
|
-- bfToChar (Comment c) = c
|
||||||
|
--
|
||||||
data Tape a = Tape [a] -- Left of the pivot element
|
data Tape a = Tape [a] -- Left of the pivot element
|
||||||
a -- Pivot element
|
a -- Pivot element
|
||||||
[a] -- Right of the pivot element
|
[a] -- Right of the pivot element
|
||||||
@ -64,7 +64,7 @@ traceParens :: BFSource -> [Int]
|
|||||||
traceParens (BFSource bfs) = scanl accParens 0 bfs
|
traceParens (BFSource bfs) = scanl accParens 0 bfs
|
||||||
|
|
||||||
getMissingOpenError :: BFSource -> String
|
getMissingOpenError :: BFSource -> String
|
||||||
getMissingOpenError (BFSource bfs) =
|
getMissingOpenError (BFSource bfs) =
|
||||||
"Syntax Error:\n- Close parens without open paren: character " ++ index where
|
"Syntax Error:\n- Close parens without open paren: character " ++ index where
|
||||||
index = (show . fromJust . findIndex (<0) $ scanl accParens 0 bfs)
|
index = (show . fromJust . findIndex (<0) $ scanl accParens 0 bfs)
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ parseBrainfuck = checkSyntax . BFSource . mapMaybe charToBF
|
|||||||
charToBF ']' = Just LoopR
|
charToBF ']' = Just LoopR
|
||||||
charToBF c = Just (Comment c)
|
charToBF c = Just (Comment c)
|
||||||
|
|
||||||
printBrainfuck :: Either String BFSource -> IO ()
|
printBrainfuck :: Either String BFSource -> IO ()
|
||||||
printBrainfuck (Left bfs) = putStrLn bfs
|
printBrainfuck (Left bfs) = putStrLn bfs
|
||||||
printBrainfuck (Right bfs) = putStrLn . show $ bfs
|
printBrainfuck (Right bfs) = putStrLn . show $ bfs
|
||||||
|
|
||||||
@ -176,4 +176,4 @@ runFile filename = readFile filename >>= runBrainfuck . parseBrainfuck
|
|||||||
main = do
|
main = do
|
||||||
args <- getArgs
|
args <- getArgs
|
||||||
mapM runFile args
|
mapM runFile args
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user