DIRECTORY IO: TYPE USING [STREAM], MTParseTable: TYPE ParseTable USING [ActionEntry, ProdDataRef, State, TableRef, TSymbol], Rope USING [ROPE]; MTP1: CEDAR DEFINITIONS ~ { OPEN MTParseTable; Index: TYPE~INT; ValueStack: TYPE~REF ValueSeq; StateStack: TYPE~REF StateSeq; LinkStack: TYPE~REF LinkSeq; ActionStack: TYPE~REF ActionSeq; AddrSpecNode: TYPE ~ RECORD[ localPart: REF ANY, -- localPart may point to AddrSpecNode or DotWordsNode atSign: REF TerminalNode _ NIL, domain: REF DomainNode _ NIL]; DomainNode: TYPE ~ RECORD[ domain: REF DomainNode _ NIL, dot: REF TerminalNode _ NIL, subDomain: REF TerminalNode]; DotWordsNode: TYPE ~ RECORD[ dotWords: REF DotWordsNode _ NIL, dot: REF TerminalNode _ NIL, word: REF TerminalNode]; InternalNode: TYPE ~ LIST OF REF ANY; MailboxNode: TYPE ~ RECORD[ phrase: REF ANY _ NIL, address: REF ANY]; RouteAddrNode: TYPE ~ RECORD[ lBrack: REF TerminalNode, route: REF RouteNode _ NIL, colon: REF TerminalNode _ NIL, addrSpec: REF AddrSpecNode, rBrack: REF TerminalNode]; RouteNode: TYPE ~ RECORD[ route: REF RouteNode _ NIL, comma: REF TerminalNode _ NIL, atSign: REF TerminalNode, domain: REF DomainNode]; TerminalNode: TYPE ~ RECORD[ whiteSpace: Rope.ROPE _ NIL, text: Rope.ROPE]; 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 ScanInit: PROC[source: IO.STREAM]; ScanReset: PROC RETURNS[nTokens, nErrors: CARDINAL]; ScannerProc: TYPE~PROC RETURNS [token: Token]; ScanName: ScannerProc; ScanDate: ScannerProc; InstallParseTable: PROC[TableRef]; Parse: PROC[source: IO.STREAM, Input: ScannerProc] RETURNS[complete: BOOL, nTokens, nErrors: CARDINAL]; AssignDescriptors: PROC[ qd: ActionStack, vd: ValueStack, ld: LinkStack, pp: ProdDataRef]; EvalInit: PROC; ProcessQueue: PROC[qI, top: CARDINAL]; ProcessError: PROC[top: CARDINAL, inputValue: TValue]; GetEvalResult: PROC RETURNS [tree: REF ANY, badSemantics: BOOL]; }. ¬file MTP1.mesa last modified by Satterthwaite, June 6, 1983 2:35 pm last edit by Schmidt, May 3, 1982 4:28 pm Last Edited by: Nichols, July 13, 1983 6:24 pm ref types record structures These three record types are used to build the tree describing the name list. Fields that have default initializers of NIL may be NIL, but others must be filled in. implemented by scanner implemented by parser implemented by evaluator Êî˜Jšœ™Jšœ4™4Jšœ)™)Jšœ.™.J˜šÏk ˜ Jšœœœœ˜Jšœœ œ6˜YJšœœœ˜J˜—šœœ œ˜Jšœ˜J˜Jšœœœ˜J˜Jšœ ™ ˜Jšœ œœ ˜Jšœ œœ ˜Jšœ œœ ˜Jšœ œœ ˜ J˜—šœ™J˜™¥šœœœ˜Jšœ œœÏc6˜KJšœœœ˜Jšœœœ˜—šœ œœ˜Jšœœœ˜Jšœœœ˜Jšœ œ˜—šœœœ˜Jšœ œœ˜!Jšœœœ˜Jšœœ˜—Jš œœœœœœ˜%šœ œœ˜Jšœœœœ˜Jšœ œœ˜—šœœœ˜Jšœœ˜Jšœœ œ˜Jšœœœ˜Jšœ œ˜Jšœœ˜—šœ œœ˜Jšœœ œ˜Jšœœœ˜Jšœœ˜Jšœœ ˜—šœœœ˜Jšœœœ˜Jšœ œ˜——J˜Jš œœœœœž˜8Jšœ œœž˜5J˜J˜šœœœž˜1Jšœ ž˜"Jšœž ˜/J˜—Jš œ œœœ œœ˜5J˜Jšœœ˜Jšœœ˜$J˜J˜J˜Jš œ œœœ œœ˜5Jš œ œœœ œœ ž˜LJš œ œœœ œœ˜