ckit, a front end for C in SML
Version 1.0, 31 Mar 2000
------------------------------

0. Contact information
----------------------

   ckit mailing list: ckit@research.bell-labs.com
   Nevin Heintze: nch@research.bell-labs.com
   Dino Oliva: oliva@research.nj.nec.com
   Dave MacQueen: dbm@research.bell-labs.com


1. How to build it
------------------

Let CKIT be the directory containing the CKit code.
Run SML in directory $CKIT/ast.
Execute "CM.make();".  This gives you the parser/elaborator.


2. How to use it
----------------
Top level driving functions are in file parse-to-ast.sml.  Generally
use ParseToAst.fileToAst.  It returns a record of type BuildAst.ProgramInfo.

Example:

  val {ast: Ast.ast,
       tidtab: Bindings.tidBinding Tidtab.uidtab,
       errorCount: int,
       warningCount: int,
       auxiliaryInfo: {aidtab: Tables.aidtab,
		       implicits: Tables.aidtab,
                       env: State.symtab}}
      = ParseToAst.fileToAst ("file");

Ast.ast is the abstract syntax type for translation units (a list of top-level
C declarations).  For further information, read the code.

To get ahold of parse trees (parser/parse-tree.sml), which is the raw data
structure produced by the parser:

  val errorState : Error.errorState = Error.mkErrState TextIO.stdOut;
  val parseTree : ParseTree.externalDecl list =
      Parser.parseFile errorState "file";

See parse/util/error.sml for the definition of the errorState type.


3. Directory map
----------------

parser/
  parser-tree-sig.sml, parser-tree.sml: definition of parse tree types
  grammar/
    lex and yacc specifications
  util/
    sourcemap-sig.sml, sourcemap.sml: mapping source file locations
    error-sig.sml, error.sml: error reporting functions
ast/
  ast-sig.sml, ast.sml: definition of abstract syntax types
  build-ast.sml:
    translation from parse trees to abstract syntax, with type checking and other
    static semantics processing
  pp/* : pretty printing for ast
  extensions/
    c/  -- dummy extension structures for C
variants/
  ansic/
    config.sml: various flags controlling error checking, type checking, etc.
ast-utils/
  copy/
    copying ast types
  equality/
    equality for ast types
  simplifier/
    ast simplifier


4. Notes:

4.1 Pretty printing - suppressing underscores

You can suppress underscores in pretty-printing using:

  PPLib.suppressPidUnderscores := true;
  PPLib.suppressTidUnderscores := true;

4.2 ast-util

Much of this code is suspect and needs revision.


5. Todo:

5.1. Implement checks on casts.
     - explicit casts currently allow any change of type;
       instead they should only allow permitted conversions.

-----------------------------------------------------------------------------------

