-- file ModelParseDefs.Mesa
-- Pilot 6.0/ Mesa 7.0
-- last modified by Satterthwaite, January 3, 1983 3:08 pm
-- last modified by Schmidt, 2-May-81 13:33:18
DIRECTORY
ModelParseTable: TYPE USING [ActionEntry, ProdDataRef, State, TableRef, TSymbol],
Stream: TYPE USING [Handle];
P1: DEFINITIONS={
OPEN ModelParseTable;
-- pointer types
ValueStack: TYPE~LONG POINTER TO P1.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~RECORD [ -- type of the value stack
SELECT OVERLAID * FROM
scalar => [s: LONG UNSPECIFIED],
ref => [r: LONG UNSPECIFIED]
ENDCASE];
nullValue: P1.Value~[scalar[0]];
nullId: P1.Value~[ref[0]];
ValueSeq: TYPE~RECORD [SEQUENCE length: NAT OF P1.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: P1.Value,
index: CARDINAL]; -- source line index
-- implemented by scanner
Atom: PROC RETURNS [Token];
ErrorContext: PROC [to: Stream.Handle, message: LONG STRING, tokenIndex: CARDINAL];
ResetScanIndex: PROC [CARDINAL] RETURNS [success: BOOL];
ScanInit: PROC [table: TableRef];
ScanReset: PROC RETURNS [nTokens, nErrors: CARDINAL];
GuaranteeScannerCleanedUp: PROC;
-- implemented by parser
InvokeParser: PROC RETURNS [complete: BOOL, nTokens, nErrors: CARDINAL];
ParserID: PROC RETURNS [LONG STRING];
InputLoc: PROC RETURNS [CARDINAL];
-- implemented by interpreter (MDRulesImpl.mesa)
AssignDescriptors: PROC [
qd: P1.ActionStack, vd: P1.ValueStack, ld: P1.LinkStack, pp: ProdDataRef];
ProcessQueue: PROC [qI, top: CARDINAL];
TokenValue: PROC [TSymbol] RETURNS [P1.Value];
-- the global frames
ModelScannerImpl, ModelParserImpl, MDRulesImpl: PROGRAM;
-- to hide need for CompilerUtil, implemented in MDParseImpl
StreamId: TYPE = MACHINE DEPENDENT {source, object, log, (255)};
AcquireStream: PROC [StreamId] RETURNS [Stream.Handle];
ReleaseStream: PROC [StreamId];
TableId: TYPE = MACHINE DEPENDENT {parse, error, debug, (255)};
AcquireTable: PROC [TableId] RETURNS [LONG POINTER];
ReleaseTable: PROC [TableId];
}.