-- P1.mesa  last edit, Bruce  August 5, 1980  4:57 PM

DIRECTORY
  Ascii USING [NUL, CR, ControlZ],
  ParseTable,
  MachineDefs USING [SHandle],
  Tree USING [NodeName];

P1: DEFINITIONS =
  BEGIN

  NUL: CHARACTER = Ascii.NUL;
  CR: CHARACTER = Ascii.CR;
  ControlZ: CHARACTER = Ascii.ControlZ;

  -- Parsing

  lastntstate: ParseTable.State = LAST[ParseTable.NTState];
  DefaultMarker: ParseTable.TSymbol = FIRST[ParseTable.TSymbol];

  Token: TYPE = RECORD [
    class: ParseTable.TSymbol,		-- the token class
    value: UNSPECIFIED,
    index: CARDINAL];		-- source line index

  InputLoc: PROCEDURE RETURNS [CARDINAL];
  DParse: PROCEDURE [STRING] RETURNS [BOOLEAN];
  Parse: PROC [  -- for Pass1
	sourceStream, messageStream: MachineDefs.SHandle,
	table: ParseTable.Handle]
      RETURNS [complete: BOOLEAN, nTokens, nErrors: CARDINAL];

  -- Scanning

  hashval: ParseTable.HashIndex = LAST[ParseTable.HashIndex];

  Atom: PROCEDURE RETURNS [symbol: Token];
  ScanInit: PROCEDURE [string: STRING, table: ParseTable.Handle];
  ScanReset: PROCEDURE RETURNS [BOOLEAN];

  -- Interpreting

  QueueProcessor: TYPE = PROCEDURE [qI, top: CARDINAL];

  AssignDescriptors: PROCEDURE [
    lq: DESCRIPTOR FOR ARRAY OF ParseTable.ActionEntry,
    lv: DESCRIPTOR FOR ARRAY OF UNSPECIFIED,
    ll: DESCRIPTOR FOR ARRAY OF CARDINAL,
    lproddata: DESCRIPTOR FOR ARRAY OF ParseTable.ProductionInfo];
  ProcessQueue: QueueProcessor;

  -- the global frames
  Scanner, Parser, Pass1T: PROGRAM;
  PrefillSymbols: PROC;

  PrintNodeName: PROC [Tree.NodeName];

  END.