SMP1.Mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Satterthwaite, April 15, 1986 12:08:41 pm PST
DIRECTORY
IO: TYPE USING [STREAM],
Rope: TYPE USING [ROPE],
SMCommentTable: TYPE USING [Index],
SMOps: TYPE USING [MS],
SMParseTable: TYPE ParseTable USING [ActionEntry, ProdDataRef, State, TableRef, TSymbol];
P1:
CEDAR DEFINITIONS ~ {
OPEN ParseTable~~SMParseTable;
Index: TYPE ~ SMCommentTable.Index;
ref types
ValueStack: TYPE ~ REF ValueSeq;
StateStack: TYPE ~ REF StateSeq;
LinkStack: TYPE ~ REF LinkSeq;
ActionStack: TYPE ~ REF ActionSeq;
record structures (LONG or REF does not occur past this point)
TValue: TYPE ~ REF ANY; -- tree value (usually)
Value:
TYPE ~
RECORD[
-- type of the value stack
n: NAT𡤀, -- scalars only
ValueSeq: TYPE ~ RECORD[SEQUENCE length: NAT OF P1.Value];
nullTValue: TValue ~ NIL;
nullValue: P1.Value ~ [];
nullId: P1.Value ~ nullValue;
StateSeq: TYPE ~ RECORD[SEQUENCE length: NAT OF ParseTable.State];
LinkSeq: TYPE ~ RECORD[SEQUENCE length: NAT OF CARDINAL]; -- links to source text
ActionSeq: TYPE ~ RECORD[SEQUENCE length: NAT OF ParseTable.ActionEntry];
Token:
TYPE ~
RECORD[
class: ParseTable.TSymbol, -- the token class
value: TValue,
index: CARDINAL]; -- source line index
implemented by Scanner
ErrorContext: PROC[message: Rope.ROPE, tokenIndex: Index];
InstallScanTable: PROC[ParseTable.TableRef];
NextToken: PROC RETURNS[Token];
ResetScanIndex: PROC[Index] RETURNS[success: BOOL];
ScanInit: PROC[model: SMOps.MS, source: IO.STREAM];
ScanReset: PROC RETURNS[nTokens, nErrors: CARDINAL];
implemented by Parser
InputLoc: PROC RETURNS[Index];
InstallParseTable: PROC[ParseTable.TableRef];
Parse:
UNSAFE
PROC[model: SMOps.
MS, source:
IO.
STREAM, prefixOk:
BOOL←
FALSE]
RETURNS[complete: BOOL, nTokens, nErrors: CARDINAL];
implemented by tree builder
AssignDescriptors:
PROC[
qd: ActionStack, vd: ValueStack, ld: LinkStack,
pp: ParseTable.ProdDataRef,
model: SMOps.MS];
ProcessQueue: PROC[qI, top: CARDINAL];
TokenValue: PROC[ParseTable.TSymbol] RETURNS[TValue];
}.