Guide to GF Implementation Code
Aarne Ranta



This document describes the code in GF grammar compiler and interactive
environment. It is aimed to cover well the implementation of the forthcoming
GF3. In comparison to GF 2.8, this implementation uses
- the same source language, GF (only slightly modified)
- a different run-time target language, GFCC (instead of GFCM)
- a different separate compilation target language (a fragment GF itself, 
  instead of GFC)
- a different internal representation of source code


Apart from GFCC, the goal of GF3 is simplification and consolidation, rather
than innovation. This is shown in particular in the abolition of GFC, and in
the streamlined internal source code format. The insight needed to achieve
these simplifications would not have been possible (at least for us) without
years of experimenting with the more messy formats; those formats moreover
grew organically when features were added to the GF language, and the old
implementation was thus a result of evolution rather than careful planning.

GF3 is planned to be released in an Alpha version in the end of 2007, its
sources forming a part of GF release 2.9.

There are currently two versions of GF3, as regards executables and ``make`` 
items:
- ``gf3``, using the old internal representation of source language, and
  integrating a compiler from GF to GFCC and an interpreter of GFCC
- ``testgf3``, using the new formats everywhere but implementing the compiler
  only; this program does not yet yield reasonable output


The descriptions below will target the newest ideas, that is, ``textgf3`` 
whenever it differs from ``gf3``.


==The structure of the code==

Code that is not shared with GF 2.8 is located in subdirectories of 
``GF/Devel/``. Those subdirectories will, however, be moved one level
up. Currently they include
- ``GF/Devel/Grammar``: the datatypes and basic operations of source code
- ``GF/Devel/Compile``: the phases of compiling GF to GFCC


The other directories involved are
- ``GF/GFCC``: data types and functionalities of GFCC
- ``GF/Infra``: infrastructure utilities for the implementation
- ``GF/Data``: datastructures belonging to infrastructure


==The source code implementation==

==The compiler==

==The GFCC interpreter==

==The GF command interpreter==






