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. ~AlpsBool.mesa Created by Bertrand Serlet, November 26, 1985 11:51:02 am PST Last edited by serlet June 15, 1985 1:26:11 pm PDT This program defines all the data structures for manipulating BoolOps. Types and data structures Constants Usual Operators This one is the primitive for the others Returns (expr AND exprTrue) OR (~expr AND exprFalse) Norm specifies whether or not If should negate both exprTrue and exprFalse Creates an expression from a variable Instanciation of expressions Low level function for creating Expressions. Creates an expression, setting the case field to the appriopriate value depending on possible simplifications. If comp=FALSE then both whenTrue and whenFalse have in fact opposite values Does NOT take expr.norm into account Expanses once the expression expr, assuming that its first variable is an auxiliary Procs operating on expressions This Equal follows auxVar for equality Utilities May raise TerminalIO.UserAbort Alps heart To create a fresh UsedVarsSequence with contents being ALL[FALSE] printLevel=0 prints nothing and just returns statistics With printLevel=0, just final statistics are printed ÊÒ˜šœ ™ J™=J™2—J™J™FJ™šÏk ˜ Jšœ˜ —J˜•StartOfExpansion[]šÏbœœ œ˜J˜Jš˜J˜™J˜JšÐbkœœœ˜J™Jšžœœ ˜J˜Jšž œœG˜VJ˜JšÏnœœœœ˜?J˜Jšž œœœ˜%šœœœ˜0JšœÏc8˜IJšœœœ¡V˜kJšœ¡˜/J˜Jšœ!¡G˜hJ˜—J˜Jšžœœœ˜1šœœœ˜$Jšœ œœ œ˜!šœœ œœ˜(Jšœœœ˜Jšœœ¡>˜[Jšœ˜——J˜Jšž œœœ ˜ šœ œœ˜Jšœœœ˜Jšœ˜Jšœ˜Jšœ¡=˜WJ˜J˜—Jšž œœ˜(—J˜šœ ™ J™Jšžœœ ˜Jšžœœ ˜—J˜™J˜Jš œœXœ˜vJ˜Jš  œœ"œœ œ˜XJ˜Jš  œœCœœœ˜qJ˜Jš œœYœ˜vJ˜Jš  œœ"œœ œ˜WJ˜Jšœ(™(Jš  œœCœœœ˜xJ˜Jš œœYœ˜wJ˜Jš Ðbnœœ"œœ œ˜XJ˜Jš  œœCœœœ˜qJ˜Jš œœœ˜2J˜Jš œœœœ˜?J˜Jš œœ5œ˜YJ˜Jšœ4™4JšœJ™JJš  œœHœœœ˜rJ˜Jšœ%™%Jš  œœœœœ˜PJ˜—™J™Jšœ,™,Jš  œœGœœœ˜wJ˜Jšœn™nJšœK™KJš  œœPœœœ˜|J˜Jšœ$™$Jš œœœ˜7Jš  œœœ˜8J˜JšœS™SJš  œœ-œ˜QJ˜Jš¡C˜CJš  œœGœ˜lJ˜—™J˜Jš ¢œœ;œœœœ˜bJ™Jšœ&™&Jš ¢ œœ;œœœœ˜fJ˜Jš œœ3œœœœœ˜vJ˜Jš œœ-œœ˜X—J˜™ J™Jš  œœœœœœ˜0J™Jš œœœœ˜IJ˜Jš  œœ3˜DJ˜Jš  œœ!œœ˜QJ˜Jš   œœ)œœœ˜WJ˜Jšœ™Jš  œœœœœ˜(Jš œœœœ˜.—J˜™ J˜Jš  œœ œœœœœœ˜jJ˜Jš œœ#œœ˜:J˜Jš  œœ!œ œœ˜HJ˜Jš ¢ œœœœœœ˜JJš  œœ0˜?J˜Jš œœœœ˜MJš œœMœ˜yJ˜Jš œœ;œœ˜]J˜Jš  œœ-œ œ˜YJ˜Jš  œœ-œœ˜_J˜Jš žœœœ œœœ˜7J˜Jš œœ-œœ˜IJ˜Jš œœœ œ˜EJ˜Jšžœœœ˜1šœœœ˜$Jšœ œœ œ˜-J˜—J˜Jšœžœ™AJš œœœ-˜gJ˜Jš¡=˜=Jš œœ0˜EJ˜Jš œœ-œœ˜OJ˜Jš¢ œœ"œ œ˜NJ˜Jš œœ-œœ˜EJ˜Jš œœœ(˜XJ˜Jšœ7™7Jš  œœ:œœ$œ˜ˆJ˜Jš  œœ"œœœ<œ˜‘J˜Jšœ4™4Jš  œœ'œ˜@J˜Jš  œœœœ˜CJšž œ ˜J˜Jš  œœCœ˜hJ˜Jš  œœAœ˜eJ˜Jš¢ œœ2œ˜iJ˜š   œœFœœœ˜„J˜—Jš¢œœœ œ˜EJ˜Jš  œœœœ˜F—J˜Jšœ˜—J˜J˜J˜—…—T(¤