--September 6, 1982 12:25 am
-- ParseTable.mesa
-- Last Edited by: Gnelson, August 24, 1983 10:30 pm

DIRECTORY Atom;

ParseTable: DEFINITIONS
= BEGIN

Handle: TYPE = REF HandleRep;

HandleRep: TYPE = RECORD [foo: INT ← 0];

NewHandle: PROC RETURNS [Handle];

Enter: PROC [h: Handle, p: Properties];
  -- sets h(p.name) := p; h(p.alias) := p; these fields must be ATOMs

Search: PROC[h: Handle, a: REF ANY, default: Properties] RETURNS [Properties];
  -- returns h(a), unless this is undefined, in which case returns default
  -- typically called with default = NIL.

Properties: TYPE = REF PRec;

PRec: TYPE = RECORD
  [name: ATOM, 
   alias: REF ANY ← NIL,  -- should be an ATOM or NIL.
   closer: Properties ← NIL,
   infix: BOOL ← FALSE,
   prefix: BOOL ← FALSE,
   postfix: BOOL ← FALSE,
   matchfix: BOOL ← FALSE,
   subfix: BOOL ← FALSE,
   busfix: BOOL ← FALSE,
   closefix: BOOL ← FALSE,
   bindingPower: INT ← 0,
   identifier: BOOL ← FALSE,
   unparserType: INT ← 0];
 
 -- The name should be the atom whose pname is the preferred representation
 -- for the operator; it will be used by the unparser.   The alias field should be
 -- nil or else an atom whose pname is an alternate way of typing the operator;
 -- this is to allow typing english names for operators that have no keys, such
 -- as "forall" or "and".  The unparserType is explained in JunoUnparserImpl.mesa
  
  
END.