Update 61: Commenced code generation

Module generate created for generating GP2 code. Currently I have a
"first draft" of generating code to match root nodes in the LHS.
Updated makefile and README.
Update 62: Code generation of simple graph matcher.

I have completed the code generation of a simple graph matcher based
on static searchplans and implemented a simple runtime system to
execute the generated code. The 'generate' module is responsible for
the code generation. It performs a depth-first scan of the LHS to
construct a searchplan, and generates code from that searchplan,
emitting a function for each LHS item.

This work necessitated a change to the stack data structure. Instead
of a void pointer, which was causing a rather obscure bug, the stack
data is now represented as a union, which is much cleaner and much
less error-prone.
Update 63: Debugging code generation module.

I have tested, debugged and commented the code generation module.
Notable changes to the code are as follows:
- The bool arrays tagged_items (generateSearchplan) and matched_nodes/
  matched_edges (printed in emitMainFunction) are initialised with
  calloc instead of being allocated on the stack.
- Do not emit code to test the label class if the candidate node list
  was obtained from a call to getNodesByLabel in the generated code.
- Added a second argument to emitNextMatcherCall to parameterise
  indentation.
- Values from the left_node or left_edge were not being extracted in
  some cases. This has been fixed.
- In emitNodeFromEdgeMatcher, the generated code that inspects the
  second incident node (in the case of a bidirectional edge) did not
  update the index variable with the new node index. This has been
  fixed.
- traverseEdge adds a search operation of type 'b' if its argument
  is a bidirectional edge.
Updated freeing functions.

Freeing functions have been updated. The function checks if the input
pointer is NULL and returns if so. Otherwise, it performs the
appropriate freeing.
Update 64: Dangling Condition

I have integrated the checking of the dangling condition into the
generated matching code. The code generation takes an extra argument:
a boolean array of left nodes, where A[i] = true if node i is deleted
by the rule, and uses it to generate the appropriate degree tests on
host nodes in the generated code.

In addition, I have updated the data structure for morphisms: the
StackData now has a struct with two integers representing a
left item -> host item mapping. I also updated stack.c and match.c
to cooperate with this change.
Update 65: Rule Analysis

Created a new module 'transform' that handles the analysis of the GP2
program from its AST. I have written a procedure to traverse the AST
of a GP2 rule and extract the necessary information and structures.
The procedure creates the LHS/RHS graphs and collates information
concerning which nodes/edges are added, deleted and preserved.
All of this is stored in a rule structure, defined in the 'rule'
module. Currently labels are ignored, but structural analyis of rules
works smoothly for simple rules and for more complicated GP2 programs
with procedures.

In addition, I have recoded parts of the graph module to respect
the changes to the stack data structure made in a previous commit.
Update 66: Minor tweaks

- Added code in seman.c to update rule names with an extended rule
  name that includes its procedural scope, e.g. "Global-rule1".
- Changed the mark type CYAN to ANY, along with corresponding changes
  in the lexer and parser.
- Removed/commented out any code that handles positions (the
  coordinates in the textual syntax).
Added a global label blank_label to the graph module.
Generalised singleSolution to nSolutions in anticipation of adding a switch to disable the isomorphism checker
Added commandline flag to disable iso-checker
Re-enabled getIsomorhismData, as it is used by IsoChecker
Added a simple dot diagram for use in papers etc
Updated IsoChecker to use isomorphismCount instead of old getIsoMorphismData function
Added a directory for benchmark progs, plus a shell script to run them.
Imported host graphs for benchmarks. Added a makefile to run benchmarks and added .host.d output directories to gitignore
Renamed acyclic test host graphs
Fixed a bug in evalCommand where lists of failures were handled incorrectly in if and try blocks.
Added an option to run individual benchmarks
Deleted outdated README.