项目作者: aiya000

项目描述 :
The brainf*ck language maker library
高级语言: Haskell
项目地址: git://github.com/aiya000/hs-brainhack.git
创建时间: 2017-02-10T03:42:07Z
项目社区:https://github.com/aiya000/hs-brainhack

开源协议:MIT License

下载


brainhack

The library for making brainf*ck dialect :+1:

Example

How to implement brainf*ck dialect with this ?

  • 1: Define your Text newtype for your brainf*ck tokens
  1. newtype NicoToken = NicoToken { unNicoToken :: Text }
  2. deriving (Eq, IsString)
  • 2: Define BrainfuckToken instance
  1. instance BrainfuckToken NicoToken where
  2. forwardToken = "笑顔届ける矢澤にこにこ!"
  3. backwordToken = "だめだめだめっ!"
  4. incrToken = "にっこにっこにー"
  5. decrToken = "にこにーって覚えてラブニコ!"
  6. outputToken = "ぴょんぴょんぴょんっ!"
  7. inputToken = "あなたのハートににこにこにー!"
  8. loopBeginToken = "にこにーはみんなのもの!"
  9. loopEndToken = "キモチワルイ"
  10. toText = unNicoToken
  11. fromText = NicoToken
  12. toOperator = flip lookup [ ("笑顔届ける矢澤にこにこ!", ForwardOp)
  13. , ("だめだめだめっ!", BackwardOp)
  14. , ("にっこにっこにー", IncrOp)
  15. , ("にこにーって覚えてラブニコ!", DecrOp)
  16. , ("ぴょんぴょんぴょんっ!", OutputOp)
  17. , ("あなたのハートににこにこにー!", InputOp)
  18. , ("にこにーはみんなのもの!", LoopBeginOp)
  19. , ("キモチワルイ", LoopEndOp)
  20. ]
  • 3: Run parse and eval
  1. main :: IO ()
  2. main = do
  3. nicoCode <- NicoToken . pack <$> readFile "hello.nico"
  4. case parse nicoCode of
  5. Left e -> error $ "Caught the error: " ++ show (e :: SomeException)
  6. Right a -> do
  7. void $ flip runBrainState emptyMachine $ eval a
  8. --(mem, logs) <- fst . flip runBrainState emptyMachine $ eval a
  9. --print mem
  10. --mapM_ putStrLn logs