<> <> <> <<>> <> <<>> DIRECTORY IO, Rope; AlpsBool: CEDAR DEFINITIONS = BEGIN <> ROPE: TYPE = Rope.ROPE; <<>> VarNb: TYPE = [0..999); CompClass: TYPE = {case11, case10, caseX1, caseX0, case1X, case0X, caseXNotX, caseXY}; RopeFromCompClass: PROC [case: CompClass] RETURNS [rope: ROPE]; Expression: TYPE = REF ExpressionRec; ExpressionRec: TYPE = MACHINE DEPENDENT RECORD [ varNb: VarNb, -- variable corresponding to this level of currification norm: BOOL _ TRUE, -- says whether the record represents the information (TRUE) or its complement (FALSE) case: CompClass, -- Class of the composition spare: [0..4) _ 0, subexpr1, subexpr2: Expression -- they are not always useful, but that's the cheapest way to have them ]; TableOfVariables: TYPE = REF TableOfVariablesRec; TableOfVariablesRec: TYPE = RECORD [ outputs: LIST OF OutputRef _ NIL, inputs: SEQUENCE size: VarNb OF RECORD [ name: ROPE _ NIL, fromOutput: OutputRef _ NIL -- the corresponding output for latches or auxiliary variables ]]; OutputRef: TYPE = REF OutputRec; OutputRec: TYPE = RECORD [ name: ROPE _ NIL, type: OutputType _ output, expr: Expression, fedBackInput: VarNb _ 0 -- the corresponding input for latches or auxiliary variables ]; OutputType: TYPE = {output, aux, latch}; <> <<>> true: READONLY Expression; false: READONLY Expression; <> And: PROC [table: TableOfVariables, expr1, expr2, expr3, expr4, expr5, expr6: Expression _ true] RETURNS [Expression]; AndList: PROC [table: TableOfVariables, exprs: LIST OF Expression] RETURNS [Expression]; AndTwo: PROC [table: TableOfVariables, expr1, expr2: Expression, norm1, norm2: BOOL _ TRUE] RETURNS [Expression]; Or: PROC [table: TableOfVariables, expr1, expr2, expr3, expr4, expr5, expr6: Expression _ false] RETURNS [Expression]; OrList: PROC [table: TableOfVariables, exprs: LIST OF Expression] RETURNS [Expression]; <> OrTwo: PROC [table: TableOfVariables, expr1, expr2: Expression, norm1, norm2: BOOL _ TRUE] RETURNS [result: Expression]; Nor: PROC [table: TableOfVariables, expr1, expr2, expr3, expr4, expr5, expr6: Expression _ false] RETURNS [Expression]; NorList: PROC [table: TableOfVariables, exprs: LIST OF Expression] RETURNS [Expression]; NorTwo: PROC [table: TableOfVariables, expr1, expr2: Expression, norm1, norm2: BOOL _ TRUE] RETURNS [Expression]; Not: PROC [expr: Expression] RETURNS [Expression]; Norm: PROC [expr: Expression, norm: BOOL] RETURNS [Expression]; Xor: PROC [table: TableOfVariables, expr1, expr2: Expression] RETURNS [expr: Expression]; <> <> If: PROC [table: TableOfVariables, expr, exprTrue, exprFalse: Expression, norm: BOOL _ TRUE] RETURNS [Expression]; <> Var, ExprFromVarNb: PROC [varNb: VarNb, norm: BOOL _ TRUE] RETURNS [Expression]; <> <<>> <> MakeComp: PROC [case: CompClass, varNb: VarNb, subexpr1, subexpr2: Expression, norm: BOOL _ TRUE] RETURNS [Expression]; <> <> Comp: PROC [table: TableOfVariables, varNb: VarNb, whenTrue, whenFalse: Expression, norm: BOOL _ TRUE] RETURNS [Expression]; <> WhenTrue: PROC [expr: Expression] RETURNS [Expression]; WhenFalse: PROC [expr: Expression] RETURNS [Expression]; <> ExpandAux: PROC [table: TableOfVariables, expr: Expression] RETURNS [Expression]; -- Expanses expr by replacing all occurences of auxVarNb by auxExpr ExpanseAux: PROC [table: TableOfVariables, expr, auxExpr: Expression, auxVarNb: VarNb] RETURNS [Expression]; <> Equal: PROC [table: TableOfVariables, expr1, expr2: Expression, norm: BOOL _ TRUE] RETURNS [BOOL]; <<>> <> FullEqual: PROC [table: TableOfVariables, expr1, expr2: Expression, norm: BOOL _ TRUE] RETURNS [BOOL]; RopeFromExpression: PROC [table: TableOfVariables, expr: Expression, norm: BOOL _ TRUE, deep: INT _ 4] RETURNS [ROPE]; AlpsRopeFromExpr: PROC [table: TableOfVariables, expr: Expression] RETURNS [rope: ROPE]; <> <<>> NewName: PROC [rope: ROPE _ NIL] RETURNS [ROPE]; <<>> InitTableOfVariables: PROC [size: INT] RETURNS [table: TableOfVariables]; AddOutput: PUBLIC PROC [table: TableOfVariables, output: OutputRef]; VarNbFromRope: PROC [table: TableOfVariables, name: ROPE] RETURNS [varNb: VarNb]; RopeFromVarNb: PROC [table: TableOfVariables, varNb: VarNb] RETURNS [name: ROPE _ NIL]; <> Input: PROC [text: ROPE] RETURNS [ROPE]; Output: PROC [t1, t2, t3, t4, t5: ROPE _ NIL]; <> ReadPLAFile: PROC [fileName: ROPE, inputs, outputs: LIST OF ROPE _ NIL] RETURNS [table: TableOfVariables]; DumpTT: PROC [table: TableOfVariables, stream: IO.STREAM]; DumpAlps: PROC [table: TableOfVariables, name: ROPE, stream: IO.STREAM]; EachNodeProc: TYPE = PROC [expr: Expression] RETURNS [quit: BOOL _ FALSE]; Enumerate: PROC [expr: Expression, eachNodeProc: EachNodeProc]; EachBranchProc: TYPE = PROC [expr: Expression] RETURNS [newExpr: Expression]; CopyTree: PROC [table: TableOfVariables, expr: Expression, eachBranchProc: EachBranchProc] RETURNS [newExpr: Expression]; Size: PROC [table: TableOfVariables, expr: Expression, varNb: VarNb] RETURNS [size: INT _ 0]; NbOfCaseXY: PROC [table: TableOfVariables, expr: Expression] RETURNS [nbCaseXY: INT _ 0]; NbOfCaseXNotX: PROC [table: TableOfVariables, expr: Expression] RETURNS [nbCaseXNotX: INT _ 0]; NbOfCasesArray: TYPE = ARRAY CompClass OF INT _ ALL[0]; MaxWidth: PROC [table: TableOfVariables, expr: Expression] RETURNS [INT]; MinWidth: PROC [table: TableOfVariables] RETURNS [minWidth: INT _ 0]; UsedVarsSequence: TYPE = REF UsedVarsSequenceRec; UsedVarsSequenceRec: TYPE = RECORD [ contents: PACKED SEQUENCE size: VarNb OF BOOL ]; <> NoUsedVarsSequence: PROC [table: TableOfVariables] RETURNS [allFalseUsedVarSequence: UsedVarsSequence]; -- Adds to usedVars all the vars used in thes Expression expr ExprAddUsedVars: PROC [expr: Expression, usedVars: UsedVarsSequence]; NbVars: PROC [table: TableOfVariables, expr: Expression] RETURNS [nb: INT _ 0]; NbUsedVar: PROC [expr: Expression, varNb: VarNb] RETURNS [nbUsedVar: INT _ 0]; Deep: PROC [table: TableOfVariables, expr: Expression] RETURNS [INT]; NbOfVars: PROC [table: TableOfVariables] RETURNS [input, aux, output, latch: VarNb _ 0]; <> PrintExpression: PROC [table: TableOfVariables, output: OutputRef, printLevel: INT _ 4] RETURNS [size, nbOfCaseXY, maxWidth, deep: INT]; TableStatistics: PROC [table: TableOfVariables, print: BOOL _ FALSE] RETURNS [area, sigmaSize, sigmaNbOfCaseXY, sigmaMaxWidth, maxDeep: INT _ 0]; <> PrintTable: PROC [table: TableOfVariables, printLevel: INT _ 4]; RenumProc: TYPE = PROC [oldVarNb: VarNb] RETURNS [newVarNb: VarNb]; IdentityRenum: RenumProc; ChangeVars: PROC [table: TableOfVariables, expr: Expression, renumProc: RenumProc] RETURNS [Expression]; Factorize: PROC [table: TableOfVariables, expr, aux: Expression, auxVar: VarNb] RETURNS [Expression]; Permute2Vars: PROC [table: TableOfVariables, varNb1, varNb2: VarNb] RETURNS [newTable: TableOfVariables]; ExprWhenVarIs: PROC [table: TableOfVariables, expr: Expression, varNb: VarNb, varNbNorm: BOOL _ TRUE] RETURNS [newExpr: Expression]; Checksum: PROC [table: TableOfVariables] RETURNS [checksum: INT _ 0]; EstimatedArea: PROC [table: TableOfVariables] RETURNS [area: INT _ 0]; END.