Branch: master
Find file History
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
..
Failed to load latest commit information.
README.markdown
comm.ml
compile.ml
example.comm
lexer.mll
machine.ml
parser.mly
syntax.ml
tagline.markdown

README.markdown

A simple procedural langauge with integer arithmetic, local variables, conditional statements, while loops and printing. Programs are compiled to simple (simulated) machine code.

Abstract syntax

Integer expression e:

  • variable (a string of letters)
  • integer constant
  • addition e₁ + e₂
  • subtraction e₁ - e₂
  • multiplication e₁ * e₂
  • integer division e₁ / e₂
  • remainder e₁ % e₂

Boolean expression b:

  • boolean constants true and false
  • conjunction b₁ and b₂
  • disjunction b₁ or b₂
  • negation not b

Command c:

  • no operation skip
  • local variable declaration new x := e in c
  • print expression print e
  • assign a varible x := e
  • sequence commands c₁ ; c₂
  • loop while b do c done
  • conditional statement if b then c₁ else c₂ end

Compilation to machine code

The language is compiled to simplified machine code. Use the --code command-line option to see the compiled code.

The underlying machine has a fixed amount of RAM (configurable --ram command-line option), a program, the program counter, and a stack pointer. The stack grows downards, from the top of RAM towards the bottom.