<> <> OperatorPrecedenceParse: CEDAR DEFINITIONS = BEGIN LORA: TYPE = LIST OF REF ANY; Parse: PROC [context: REF ANY, GetToken: TokenProc] RETURNS [ans: Arg]; TokenProc: TYPE = PROC [context: REF ANY, expectingArg: BOOLEAN] RETURNS [token: Token]; Reducer: TYPE = PROC [sr: SourceRange, context: REF ANY, ops: TokenList, args: ArgList] RETURNS [reduced: REF ANY]; Arg: TYPE = RECORD [sr: SourceRange, arg: REF ANY]; Token: TYPE = RECORD [sr: SourceRange, class: TokenClass, asArg: REF ANY _ NIL]; TokenClass: TYPE = REF TokenClassRep; TokenClassRep: TYPE = RECORD [ leftPrec, rightPrec: CARDINAL _ 0, --0 = don't want, >1 = want. Reduce: Reducer _ NIL, leftFix: Token _ [nullSR, NIL, NIL] ]; end: Token; argClass: TokenClass; SourceRange: TYPE = RECORD [first, last: INT] _ nullSR; nullSR: SourceRange = [-1, -1]; TokenList: TYPE = LIST OF Token; ArgList: TYPE = LIST OF Arg; CantReduce: SIGNAL [ops: TokenList, args: ArgList] RETURNS [use: REF ANY]; CantFix: SIGNAL [token: Token] RETURNS [fix: Token]; DoesntFix: ERROR [token: Token, expectingArg, willGetArg: BOOLEAN]; TerminateErr: ERROR [argStack: ArgList, opStack: TokenList]; LastReduceErr: ERROR [args: ArgList, ops: TokenList]; InvalidToken: ERROR [token: Token]; END.