DIRECTORY ParseTable: TYPE USING [ActionEntry, ProdDataRef, State, TableRef, TSymbol], IO: TYPE USING [STREAM], Rope: TYPE USING [ROPE], Symbols: TYPE USING [Name]; P1: DEFINITIONS = { OPEN ParseTable; 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; 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 IdOfFirst: PROC RETURNS [Symbols.Name]; IdOfLock: PROC RETURNS [Symbols.Name]; IdOfRest: PROC RETURNS [Symbols.Name]; Atom: PROC RETURNS [Token]; ErrorContext: PROC [to: IO.STREAM, message: Rope.ROPE, tokenIndex: CARDINAL]; InstallScanTable: PROC [ParseTable.TableRef]; ResetScanIndex: PROC [CARDINAL] RETURNS [success: BOOL]; ScanInit: PROC [ source: IO.STREAM, scratchZone: UNCOUNTED ZONE, logger: PROC [PROC [log: IO.STREAM]]]; ScanReset: PROC RETURNS [nTokens, nErrors: CARDINAL]; InstallParseTable: PROC [ParseTable.TableRef]; Parse: PROC [ source: IO.STREAM, scratchZone: UNCOUNTED ZONE, logger: PROC [PROC [log: IO.STREAM]]] RETURNS [complete: BOOL, nTokens, nErrors: CARDINAL]; ParserID: PROC RETURNS [Rope.ROPE]; InputLoc: PROC RETURNS [CARDINAL]; 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]; }. *file P1.Mesa last modified by Satterthwaite, February 18, 1983 8:39 am Last Edited by: Maxwell, August 11, 1983 1:57 pm pointer types record structures (LONG does not occur past this point) implemented by Pass1 implemented by Scanner implemented by Parser implemented by TreeBuild (Pass1T) ĘטJšœ ™ Jšœ9™9J™0J™šĎk ˜ Jšœ œœ6˜LJšœœœœ˜Jšœœœœ˜Jšœ œœ˜J˜—šœ œ˜Jšœ ˜J˜Jšœ ™ ˜Jš œ œœœœ˜0Jš œ œœœœ ˜,Jš œ œœœœ ˜*Jš œ œœœœ ˜.J˜—Jšœ7™7˜šœœœĎc˜1šœœ˜Jšœ œ˜Jšœ  œ˜Jšœ˜ J˜——J˜"J˜J˜Jš œ œœœ œœ ˜;J˜Jš œ œœœ œœ˜8Jšœ œœœ œœœž˜RJš œ œœœ œœ˜?J˜J˜šœœœ˜Jšœž˜#J˜Jšœœž˜'J˜J˜——šœ™JšĎn œœœ˜'JšŸœœœ˜&JšŸœœœ˜&J˜—šœ™JšŸœœœ ˜Jš Ÿ œœœœœœ˜MJšŸœœ˜-Jš Ÿœœœœ œ˜8šŸœœ˜Jšœœœ˜Jšœ  œœ˜Jš œœœœœ˜&—JšŸ œœœœ˜5J˜—šœ™JšŸœœ˜.šŸœœ˜ Jšœœœ˜Jšœ  œœ˜Jš œœœœœ˜%Jšœ œœ˜5—JšŸœœœœ˜#JšŸœœœœ˜"J˜—Jšœ!™!˜šŸœœ˜J˜U—JšŸ œœ œ˜'JšŸ œœ œ ˜.J˜J˜J˜———…—˜ ™