<> <> <> <<>> 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; <> ValueStack: TYPE ~ REF ValueSeq; StateStack: TYPE ~ REF StateSeq; LinkStack: TYPE ~ REF LinkSeq; ActionStack: TYPE ~ REF ActionSeq; <> TValue: TYPE ~ NAT; -- length of substring Value: TYPE ~ RECORD[ -- type of the value stack n: REF ANY_NIL, t: TValue_0]; -- 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 <> 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]; <> 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]; <> 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]; }.