MPP1.mesa
Copyright Ó 1985, 1986, 1987, 1989, 1991 by Xerox Corporation. All rights reserved.
Russ Atkinson (RRA) January 19, 1987 7:19:44 pm PST
JKF August 4, 1989 2:19:20 pm PDT
Michael Plass, September 5, 1991 9:06 pm PDT
DIRECTORY
IO USING [STREAM],
MPParseTable USING [ActionEntry, IndexTableRef, ProdDataRef, TSymbol, VocabularyRef],
MPLeaves USING [HTIndex],
Rope USING [ROPE];
MPP1: CEDAR DEFINITIONS = BEGIN
Value: TYPE = RECORD [ -- type of the value stack
sb: BOOL ¬ FALSE, sn: INTEGER ¬ 0, -- scalars only
r: REF ANY ¬ NIL
];
ValueSeq: TYPE = RECORD [SEQUENCE length: NAT OF Value];
ValueStack: TYPE = REF ValueSeq;
INTSeq: TYPE = RECORD [SEQUENCE length: CARDINAL OF INT];
ActionEntrySeq: TYPE = RECORD [SEQUENCE length: CARDINAL OF MPParseTable.ActionEntry];
nullValue: Value = [];
nullId: Value = nullValue;
nullToken: Token = [class: 0, value: nullValue, index:0];
Token: TYPE = RECORD [
class: MPParseTable.TSymbol,  -- the token class
value: Value,
index: INT];  -- source line index
implemented by Scanner
Atom: PROC [errPut: IO.STREAM] RETURNS [Token];
ErrorContext: PROC [message: Rope.ROPE, tokenIndex: INT, put: IO.STREAM];
IdOfFirst: PROC RETURNS [MPLeaves.HTIndex];
IdOfLock: PROC RETURNS [MPLeaves.HTIndex];
IdOfRest: PROC RETURNS [MPLeaves.HTIndex];
ResetScanIndex: PROC [INT] RETURNS [success: BOOL];
ScanInit: UNSAFE PROC [source: Rope.ROPE] RETURNS [vIndex: MPParseTable.IndexTableRef, vBody: MPParseTable.VocabularyRef];
ScanReset: PROC RETURNS [nTokens, nErrors: CARDINAL];
implemented by Parser
Parse: PROC [source: Rope.ROPE, errPut: IO.STREAM]
RETURNS [complete: BOOL, nTokens, nErrors: CARDINAL];
ParserID: PROC RETURNS [Rope.ROPE];
InputLoc: PROC RETURNS [INT];
implemented by Pass1T
AssignDescriptors: UNSAFE PROC [
qd: REF ActionEntrySeq,
vd: ValueStack,
ld: REF INTSeq,
pp: MPParseTable.ProdDataRef];
ProcessQueue: UNSAFE PROC [qI, top: CARDINAL];
TokenValue: UNSAFE PROC [MPParseTable.TSymbol] RETURNS [Value];
the global frames
Scanner, Parser, Pass1T: PROGRAM;
END.