<> <> <> <> <> <<>> <> DIRECTORY Basics, IO, SymTab; BoolEx: CEDAR DEFINITIONS = BEGIN <> <> <> <> <> <> <> Expression: TYPE = REF ANY; OpIndex: TYPE = {mach, out, var, not, and, nand, or, nor, func}; OpNm: PROC[op: OpIndex] RETURNS[nm: IO.ROPE]; NmOp: PROC[nm: IO.ROPE] RETURNS[op: OpIndex]; <> WriteExprFile: PROC[expr: Expression, indentedLevs: INT _ 2]; ReadExprFile: PROC[name: IO.ROPE] RETURNS[expr: Expression]; Compare: PROC[i0, i1: Expression] RETURNS[comp: Basics.Comparison]; Sort: PROC[expr: Expression]; Copy: PROC[expr: Expression] RETURNS[new: Expression]; <> OpExpr: PROC[op: OpIndex, e1, e2: Expression] RETURNS[Expression]; Equal: PROC[expr1, expr2: REF] RETURNS[equal: BOOL _ TRUE]; Eval: PROC[expr: REF, varTab: SymTab.Ref] RETURNS[BOOL]; <> <> ExpressionStats: PROC [expr: Expression] RETURNS [exprStatRope: IO.ROPE]; ScanExpression: PROC [expr: Expression, eachInput: EachInputProc _ NIL, eachOutput: EachOutputProc _ NIL] RETURNS[machName: IO.ROPE _ NIL]; EachInputProc: TYPE = PROC [name: IO.ROPE]; EachOutputProc: TYPE = PROC [name: IO.ROPE, expr: Expression]; GetExpressionTables: PUBLIC PROC[mach: Expression] RETURNS[machName: IO.ROPE, inTab, outTab: SymTab.Ref]; <> <> <> ReplaceID: PROC[old, new: IO.ROPE, symTab: SymTab.Ref]; <> <> <> <> <> <> <<>> Create: PROC[name: IO.ROPE] RETURNS[ctx: Context]; Declare: PROC[ctx: Context, name: IO.ROPE, io: InOut, size: NAT _ 1] RETURNS[ix: NAT]; If: PROC[ctx: Context, f, v: NAT, m: NAT _ default]; And: PROC[ctx: Context, f, v: NAT, m: NAT _ default]; AddOut: PROC[ctx: Context, f, v: NAT, m: NAT _ default]; EndIf: PROC[ctx: Context]; Finish: PROC[ctx: Context] RETURNS[mach: LIST OF REF]; <> Context: TYPE = REF ContextRec; ContextRec: TYPE = RECORD[ name: IO.ROPE, expr: LIST OF REF, logic: LIST OF CurrentLogic, data: LIST OF CurrentData, declares: LIST OF Declaration, -- Used during declarations signals: Signals, -- Used after all declarations termIndex: NAT, outTermTab: SymTab.Ref, invTab: SymTab.Ref]; CurrentLogic: TYPE = LIST OF FieldValMask _ NIL; CurrentData: TYPE = LIST OF FieldValMask _ NIL; FieldValMask: TYPE = RECORD[f,v,m: NAT _ default]; Signals: TYPE = REF SignalSeqRec; SignalSeqRec: TYPE = RECORD [SEQUENCE size: NAT OF Declaration]; Declaration: TYPE = RECORD [name: IO.ROPE, io: InOut, size: NAT, index: NAT]; InOut: TYPE = {in, out}; default: NAT = LAST[NAT]; END.