DIRECTORY Rope USING [ROPE], Lexer USING [Handle], HerculesAlgebra USING [Se] ParseTable USING [Properties, PRec]; HerculesParser: DEFINITIONS = BEGIN OPEN PTab: ParseTable, Alg: HerculesAlgebra; Handle: TYPE = REF HandleRec; HandleRec: TYPE = RECORD [error: Rope.ROPE _ NIL, -- set to error message on lexical error eof: BOOL _ FALSE, -- initially FALSE, set to TRUE on end of input. result: Alg.Se _ NIL, -- contains last thing produced by Parse. openCount: INT _ 0, -- number of unmatched matchfixs or subfixs in last thing parsed in: Lexer.Handle _ NIL, -- Source of lexemes to be parsed. -- WARNING The initial value of in.a is relevant; see "Parse" below defaultIdProps: PTab.Properties _ NIL, -- default properties of identifiers table: PTab.Handle _ NIL]; -- associates operator types with operators. NewHandle: PROC RETURNS [h: Handle]; Parse: PUBLIC PROC[h: Handle]; -- sets h.result to the List representing the longest prefix of -- the lexeme stream h.in that is a valid symbolic expression, -- counting the current value of h.in.a as the first lexeme. Thus -- the way to start the parser is to call Lex[h.in]; Parse[h]. -- This will parse one expression and leave in h.in.a the first lexeme -- not used in the parse tree; thus successive calls will work. -- Sets h.eof if h.in.eof is set -- Sets h.error if h.in.error is set, or if a parse error occurs. -- If h.error AND NOT h.in.error AND NOT h.in.eof then the input can be reconstructed -- by Unparse[h.result]; print h.in.a; print all of h.in, except that -- in the unparse you should skip the NIL that appears at the right-most -- position in h.result. END. ÚHerculesParser.mesa (ex Parser.mesa) NOW JUNK - See HerculesParseUnparse Simple operator precedence parser for operators of the following types: infix, prefix, postfix, matchfix (like "begin" or left grouping parenthesis), subfix (like "[" in Mesa or "(" in f(x)) and closefix (like "end" or ")"). The symbolic expression constructed by the parser is represented as in Lisp, by a nest of ordered pairs; the list cells employed are those of Mesa's LIST OF REF ANY. Last Edited by: Gnelson, January 10, 1983 5:50 pm Last Edited by: Stolfi, February 16, 1984 3:28 am Edited on February 15, 1984 2:14 am, by Stolfi Added Tioga formatting. changes to: HandleRec (added defaultIdProps, changed type of result to Alg.Se), Ę[˜Jšœ$™$J™Jšœ†™†JšœĨ™ĨJ™Jšœ2™2Jšœ2™2Jš Īk œœœ œœœ˜{Jšœ œ˜Jšœœ)˜3Jšœœœ ˜Jš&œ œœœœĪc)œœœž1œœž*œœ žAœœž#œžDœ%œž%œœž.˜øJšĪn œœœ˜%JšŸœœœž@œž?œžCœž?œžGœž@œž!œžBœžVœžFœžIœž˜ Jšœ˜J™™.Jšœ™Jšœ Īr œ œ œ™P——…—´ é