-- BcdParseDefs.mesa -- Last edited by Satterthwaite on June 15, 1982 9:03 am DIRECTORY ParseTable: TYPE USING [ActionEntry, ProdDataRef, State, TableRef, TSymbol], Stream: TYPE USING [Handle], Strings: TYPE USING [String]; P1: DEFINITIONS = { OPEN ParseTable; -- 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: UNSPECIFIED], ref => [r: 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 BcdScan Atom: PROC RETURNS [Token]; ErrorContext: PROC [to: Stream.Handle, message: Strings.String, tokenIndex: CARDINAL]; ResetScanIndex: PROC [CARDINAL] RETURNS [success: BOOL]; ScanInit: PROC [table: ParseTable.TableRef]; ScanReset: PROC RETURNS [nTokens, nErrors: CARDINAL]; -- implemented by BcdParse Parse: PROC RETURNS [complete: BOOL, nTokens, nErrors: CARDINAL]; ParserID: PROC RETURNS [Strings.String]; InputLoc: PROC RETURNS [CARDINAL]; -- implemented by BcdTreeBuild AssignDescriptors: PROC [ qd: P1.ActionStack, vd: P1.ValueStack, ld: P1.LinkStack, pp: ParseTable.ProdDataRef]; ProcessQueue: PROC [qI, top: CARDINAL]; TokenValue: PROC [TSymbol] RETURNS [P1.Value]; }.