brainfuck-tut: A simple BF interpreter.

[ bsd3, language, library, program ] [ Propose Tags ]

[Skip to Readme]
Versions 0.5.1.0, 0.5.1.1, 0.5.1.2, 0.5.1.3, 0.6.0.0, 0.6.0.1, 0.7.0.0, 0.7.0.1, 0.7.0.2
Change log changelog.md
Dependencies array, base (==4.7.*), brainfuck-tut [details]
License BSD-3-Clause
Copyright (c) 2014 Alejandro Cabrera
Author Alejandro Cabrera
Maintainer cpp.cabrera@gmail.com
Category Language
Home page https://gitlab.com/cpp.cabrera/brainfuck-tut
Bug tracker https://gitlab.com/cpp.cabrera/brainfuck-tut/issues
Source repo head: git clone git clone https://gitlab.com/cpp.cabrera/brainfuck-tut.git
Uploaded by alcabrera at Mon Nov 24 08:05:55 UTC 2014
Distributions NixOS:0.7.0.2
Executables bfh
Downloads 2790 total (77 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]
Hackage Matrix CI

Modules

[Index]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for brainfuck-tut-0.6.0.0

[back to package description]

Brainfuck: A Toy Implementation

This project exists to show what a Brainfuck evaluator might look like in Haskell.

The implementation is fairly well documented. I endeavored to make it readable.

Terms

Below is the abstract syntax tree for the BF language as implemented:

data Term
  = IncDP        -- >
  | DecDP        -- <
  | IncByte      -- +
  | DecByte      -- -
  | OutByte      -- .
  | InByte       -- ,
  | JumpForward  -- [
  | JumpBackward -- ]
  deriving (Show, Eq)

Evaluation Semantics

I followed the summary given on the wikipedia page closely. A few particulars to this implementation:

  • "Jump not found" errors abort evaluation and return the state of the tape
  • Out of bound errors are not detected
  • Evaluation proceeds until the instruction stream runs out

Executable

An executable is provided:

$ cabal build bfh
$ cabal run bfh
usage: bfh <size> <program>
$ cabal run bfh 10 ',.'
a<enter>
a