<> <> <> <> DIRECTORY ExampleBaseDef, ExampleCGDef USING[], ExampleATDef, ExampleAGDef, ThreeC4Support, ExampleGenericDef; ExampleCGImpl: CEDAR PROGRAM IMPORTS ExampleAGDef EXPORTS ExampleCGDef= BEGIN OPEN ExampleBaseDef, ExampleATDef, ExampleAGDef, ThreeC4Support, ExampleGenericDef; ExampleCGLinkProc: PUBLIC PROC[prodLinkArray: SeeProdLinkArray, tknLinkArray: TokenLinkArray] = BEGIN prodLinkArray[0] _ Seemaingoal; prodLinkArray[1] _ Seesumprod; prodLinkArray[2] _ Seesumplus; prodLinkArray[3] _ Seesumminus; prodLinkArray[4] _ Seeproductprim; prodLinkArray[5] _ Seeproductmult; prodLinkArray[6] _ Seeproductdiv; prodLinkArray[7] _ Seeprimitivenumber; prodLinkArray[8] _ Seeprimitiveloc; prodLinkArray[9] _ Seeprimitivesignal; prodLinkArray[10] _ Seeprimitiveparen; END; Seemaingoal: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; sum: ExpressionNode; sum _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[sum, stack]; RETURN[stack] END; Seesumprod: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; product: ExpressionNode; product _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[product, stack]; RETURN[stack] END; Seesumplus: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; sum: ExpressionNode; product: ExpressionNode; product _ NARROW[stack.first]; stack _ stack.rest; sum _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildExpressionbinProdNode[position, length, sum, Op.plus, product], stack]; RETURN[stack] END; Seesumminus: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; sum: ExpressionNode; product: ExpressionNode; product _ NARROW[stack.first]; stack _ stack.rest; sum _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildExpressionbinProdNode[position, length, sum, Op.minus, product], stack]; RETURN[stack] END; Seeproductprim: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; primitive: ExpressionNode; primitive _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[primitive, stack]; RETURN[stack] END; Seeproductmult: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; product: ExpressionNode; primitive: ExpressionNode; primitive _ NARROW[stack.first]; stack _ stack.rest; product _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildExpressionbinProdNode[position, length, product, Op.mult, primitive], stack]; RETURN[stack] END; Seeproductdiv: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; product: ExpressionNode; primitive: ExpressionNode; primitive _ NARROW[stack.first]; stack _ stack.rest; product _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildExpressionbinProdNode[position, length, product, Op.div, primitive], stack]; RETURN[stack] END; Seeprimitivenumber: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; number: numberNode; number _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildExpressionnumberProdNode[position, length, number], stack]; RETURN[stack] END; Seeprimitiveloc: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildExpressionlocProdNode[position, length], stack]; RETURN[stack] END; Seeprimitivesignal: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildExpressionsignalProdNode[position, length], stack]; RETURN[stack] END; Seeprimitiveparen: PROC[nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS[LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; sum: ExpressionNode; sum _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[sum, stack]; RETURN[stack] END; END..