-- file SMP1.mesa
-- last modified by Satterthwaite, July 29, 1983 9:32 am
-- last edit by Schmidt, May 3, 1982 4:28 pm
DIRECTORY
IO: TYPE USING [STREAM],
SMParseTable: TYPE ParseTable USING [ActionEntry, ProdDataRef, State, TableRef, TSymbol],
SMCommentTable: TYPE USING [Index, Text],
SMOps: TYPE USING [MS];
SMP1: CEDAR DEFINITIONS ~ {
OPEN 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
TValue: TYPE ~ REF ANY←NIL; -- value of terminal symbol
NTValue: TYPE ~ CARDINAL←0; -- value of nonterminal
Value: TYPE~RECORD[ -- type of the value stack
t: TValue, -- refs (ATOMS, etc.)
n: NTValue]; -- scalars (counts, flags, etc.)
ValueSeq: TYPE~RECORD[SEQUENCE length: NAT OF Value];
nullTValue: TValue ~ NIL;
nullNTValue: NTValue ~ NTValue.LAST;
nullValue: Value ~ [];
nullId: Value ~ nullValue;
StateSeq: TYPE~RECORD[SEQUENCE length: NAT OF State];
LinkSeq: TYPE~RECORD[SEQUENCE length: NAT OF Index]; -- links to source text
ActionSeq: TYPE~RECORD[SEQUENCE length: NAT OF ActionEntry];
Token: TYPE~RECORD[
class: TSymbol, -- the token class
value: TValue, -- value
index: Index]; -- source stream index
-- implemented by scanner
Atom: PROC RETURNS[Token];
ErrorContext: PROC[message: SMCommentTable.Text, tokenIndex: Index];
InstallScanTable: PROC[TableRef];
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[TableRef];
Parse: UNSAFE PROC[model: SMOps.MS, source: IO.STREAM, prefix: BOOL←FALSE]
RETURNS[complete: BOOL, nTokens, nErrors: CARDINAL];
-- implemented by tree builder
AssignDescriptors: PROC[
qd: ActionStack, vd: ValueStack, ld: LinkStack,
pp: ProdDataRef,
model: SMOps.MS];
ProcessQueue: PROC[qI, top: CARDINAL];
TokenValue: PROC[TSymbol] RETURNS[TValue];
}.