-- file PGS1.mesa
-- last modified by Satterthwaite, November 2, 1982 10:37 am

DIRECTORY
ParseTable: FROM "PGSParseTable" USING [
ActionEntry, ProdDataRef, State, Symbol, TableRef, TSymbol];

PGS1: DEFINITIONS = {
OPEN ParseTable;

-- pointer types

ValueStack: TYPE = LONG POINTER TO PGS1.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 = CARDINAL;

ValueSeq: TYPE = RECORD [SEQUENCE length: NAT OF PGS1.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: PGS1.Value,
index: CARDINAL];  -- source line index

-- implemented by PGSScan
Atom: PROC RETURNS [Token];
ResetScanIndex: PROC [CARDINAL];
ScanInit: PROC [ParseTable.TableRef];
ScanReset: PROC [pErrors:CARDINAL] RETURNS [nTokens, nErrors: CARDINAL];
AssignDescriptors: PROC [
 qd: PGS1.ActionStack,
 vd: PGS1.ValueStack,
 ld: PGS1.LinkStack,
 pp: ParseTable.ProdDataRef];
ProcessQueue: PROC [qI, top: CARDINAL];
TokenValue: PROC [TSymbol] RETURNS [UNSPECIFIED];

-- implemented by PGSParse
Parse: PROC [ParseTable.TableRef]
RETURNS [complete: BOOL, nTokens, nErrors: CARDINAL];
InputLoc: PROC RETURNS [CARDINAL];

-- implemented by PGSControl

ErrorContext: PROC [STRING, CARDINAL];
LocateIndex: PROC [index: CARDINAL] RETURNS [CARDINAL];

}.