DIRECTORY ArpaMTParseTable: TYPE ParseTable USING [ActionEntry, ProdDataRef, State, TableRef, TSymbol], IO: TYPE USING [STREAM], Rope USING [ROPE]; ArpaMTP1: CEDAR DEFINITIONS ~ { OPEN ArpaMTParseTable; 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 ArpaMTP1.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 John Larson, October 21, 1987 10:17:29 pm PDT 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šœ4™4Jšœ)™)Jšœ.™.Icodešœ-™-—J˜šΟk ˜ Jšœœ œ6˜]Jšœœœœ˜Jšœœœ˜J˜—šΟnœœ œ˜Jšœ˜J˜Jšœœœ˜J˜Jšœ ™ ˜Jšœ œœ ˜Jšœ œœ ˜Jšœ œœ ˜Jšœ œœ ˜ J˜—šœ™J˜šœxœœ™₯šœœœ˜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š œ œœœ œœ˜