-- BcdParseDefs.mesa
-- Last edited by Satterthwaite on June 15, 1982 9:03 am

DIRECTORY
  ParseTable: TYPE USING [ActionEntry, ProdDataRef, State, TableRef, TSymbol],
  Stream: TYPE USING [Handle],
  Strings: TYPE USING [String];

P1: DEFINITIONS = {
  OPEN ParseTable;

 -- pointer types
 
  ValueStack: TYPE ~ LONG POINTER TO  P1.ValueSeq;
  StateStack: TYPE ~ LONG POINTER TO StateSeq;
  LinkStack: TYPE ~ LONG POINTER TO LinkSeq;
  ActionStack: TYPE ~ LONG POINTER TO ActionSeq;
  
 -- record structures (LONG does not occur past this point)
  
  Value: TYPE ~ RECORD [	-- type of the value stack
    SELECT OVERLAID * FROM
      scalar => [s: UNSPECIFIED],
      ref => [r: UNSPECIFIED]
      ENDCASE];

  NullValue: P1.Value ~ [scalar[0]];
  NullId: P1.Value ~ [ref[0]];

  ValueSeq: TYPE ~ RECORD [SEQUENCE length: NAT OF P1.Value];

  StateSeq: TYPE ~ RECORD [SEQUENCE length: NAT OF State];
  LinkSeq: TYPE ~ RECORD [SEQUENCE length: NAT OF CARDINAL];	-- links to source text
  ActionSeq: TYPE ~ RECORD [SEQUENCE length: NAT OF ActionEntry];


  Token: TYPE ~ RECORD [
    class: TSymbol,		-- the token class
    value: P1.Value,
    index: CARDINAL];		-- source line index

 -- implemented by BcdScan
  Atom: PROC RETURNS [Token];
  ErrorContext: PROC [to: Stream.Handle, message: Strings.String, tokenIndex: CARDINAL];
  ResetScanIndex: PROC [CARDINAL] RETURNS [success: BOOL];
  ScanInit: PROC [table: ParseTable.TableRef];
  ScanReset: PROC RETURNS [nTokens, nErrors: CARDINAL];

 -- implemented by BcdParse
  Parse: PROC RETURNS [complete: BOOL, nTokens, nErrors: CARDINAL];
  ParserID: PROC RETURNS [Strings.String];
  InputLoc: PROC RETURNS [CARDINAL];

 -- implemented by BcdTreeBuild
  AssignDescriptors: PROC [
    qd: P1.ActionStack, vd: P1.ValueStack, ld: P1.LinkStack, pp: ParseTable.ProdDataRef];
  ProcessQueue: PROC [qI, top: CARDINAL];
  TokenValue: PROC [TSymbol] RETURNS [P1.Value];

  }.