CtoSP1.Mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Satterthwaite, April 15, 1986 12:18:27 pm PST
DIRECTORY
IO: TYPE USING [STREAM],
CtoSParseTable: TYPE ParseTable USING [ActionEntry, ProdDataRef, State, TableRef, TSymbol],
Rope: TYPE USING [ROPE],
SMCommentTable: TYPE USING [Index],
SMOps: TYPE USING [MS];
P1:
CEDAR DEFINITIONS ~ {
OPEN ParseTable ~~ CtoSParseTable;
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 ~ NAT; -- length of substring
Value:
TYPE ~
RECORD[
-- type of the value stack
n: REF ANY←NIL,
t: TValue𡤀];
-- scalars only (length of token for terminals)
ValueSeq: TYPE ~ RECORD[SEQUENCE length: NAT OF P1.Value];
nullTValue: TValue ~ 0;
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];
Substr: PROC[start: Index, length: INT] RETURNS[Rope.ROPE];
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];
}.