<> <> <> <> <> DIRECTORY Core USING [CellType], Rope USING [ROPE]; Boole: CEDAR DEFINITIONS = BEGIN <> <> <> ROPE: TYPE = Rope.ROPE; <> <> <> <> <> <> Expression: TYPE = Core.CellType; <> true: READONLY Expression; false: READONLY Expression; <> Var: PROC [var: ROPE] RETURNS [result: Expression]; <> Not: PROC [expr: Expression] RETURNS [result: Expression]; And: PROC [expr1, expr2, expr3, expr4, expr5: Expression _ true] RETURNS [result: Expression]; Or: PROC [expr1, expr2, expr3, expr4, expr5: Expression _ false] RETURNS [result: Expression]; Xor: PROC [expr1, expr2, expr3, expr4, expr5: Expression _ false] RETURNS [result: Expression]; Nand: PROC [expr1, expr2, expr3, expr4, expr5: Expression _ true] RETURNS [result: Expression]; Nor: PROC [expr1, expr2, expr3, expr4, expr5: Expression _ false] RETURNS [result: Expression]; AndList: PROC [exprs: LIST OF Expression] RETURNS [result: Expression]; OrList: PROC [exprs: LIST OF Expression] RETURNS [result: Expression]; XorList: PROC [exprs: LIST OF Expression] RETURNS [result: Expression]; NandList: PROC [exprs: LIST OF Expression] RETURNS [result: Expression]; NorList: PROC [exprs: LIST OF Expression] RETURNS [result: Expression]; If: PROC [cond, then, else: Expression] RETURNS [result: Expression]; <> <> EvalProc: TYPE = PROC [var: ROPE, expr: Expression] RETURNS [whenTrue, whenFalse: Expression]; ToRopeProc: TYPE = PROC [expr: Expression, deep: INT _ 9] RETURNS [ROPE]; FindVarProc: TYPE = PROC [expr: Expression] RETURNS [var: ROPE]; <> <> Eval: EvalProc; <<>> ToRope: ToRopeProc; FromRope: PROC [er: ROPE] RETURNS [expr: Expression]; FindVar: FindVarProc; Equal: PROC [expr1, expr2: Expression] RETURNS [BOOL]; <> Case: PRIVATE PROC [whenTrue, whenFalse: Expression] RETURNS [case: ATOM]; <> END.