README.md in mojikun-1.0.0 vs README.md in mojikun-1.0.1

- old
+ new

@@ -2,18 +2,18 @@ A Brainfuck based on Emoji. Instructions: -👉 Move the pointer to the right -👈 Move the pointer to the left -👍 Increment the memory cell under the pointer -👎 Decrement the memory cell under the pointer -💻 Output the character signified by the cell at the pointer -💾 Input a character and store it in the cell at the pointer -🔃 Jump past the matching 🔙 if the cell under the pointer is 0 -🔙 Jump back to the matching 🔃 if the cell under the pointer is nonzero +👉 Move the pointer to the right +👈 Move the pointer to the left +👍 Increment the memory cell under the pointer +👎 Decrement the memory cell under the pointer +💻 Output the character signified by the cell at the pointer +💾 Input a character and store it in the cell at the pointer +🔃 Jump past the matching 🔙 if the cell under the pointer is 0 +🔙 Jump back to the matching 🔃 if the cell under the pointer is nonzero ## Installation Add this line to your application's Gemfile: @@ -31,13 +31,58 @@ A `mojikun` binary is provided to let you run programs. There is an examples directory which has some examples. Use `mojikun` like any other interpreter: ``` -mokikun examples/hello.moji +mojikun examples/hello.moji ``` `.moji` is the preferred file ending for Mojikun. + +## Structure + +While Mojikun is a simple language that could be interpreted in a 40ish line +script, I wanted to make it more like a 'real langauge' that would have all +of the parts and design that a more full one has. I may use this foundation +later to build more complex things. + +We can see these parts in motion by examining the binary: + +```ruby +$ cat bin/mojikun +#!/usr/bin/env ruby + +require 'mojikun' + +source_code = ARGF.read.chomp + +tokens = Mojikun::Lexer.new(source_code).call + +ast = Mojikun::Parser.new(tokens).call + +runtime = Mojikun::Runtime.new +interpreter = Mojikun::Interpreter.new(runtime) + +interpreter.evaluate(ast) +``` + +We have a Lexer, Parser, Runtime, and Interpreter. The Lexer turns the stream +of input into a series of tokens. The Parser takes those tokens and turns them +into an AST, which is more of a list than a tree, really. We generate a new +Runtime, which has all of the internal state we need to make the language work: +the data array, the program counter, etc. Then, the Interpreter takes that +AST and evaluates it in the context of the Runtime. + +Pretty simple! + +## Testing + +Mojikun is fully tested with MiniTest. I actually wrote it in a TDD fashion. +To run the tests, simply + +``` +$ rake test +``` ## Contributing 1. Fork it 2. Create your feature branch (`git checkout -b my-new-feature`)