-- 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];
}.