Sum Inh

Center
imports
{
import System.Environment( getArgs )
import System.CPUTime
}

DATA Root
   | Root  tree: Tree

DATA Tree
   | Node  left:  Tree   right: Tree
   | Leaf  value: Int

ATTR Tree Root [ | | sval : Int ]
ATTR Tree  [ ival1, ..., ivaln : Int | | ]


SEM Root
  | Root  lhs.sval  =  @tree.sval

SEM Tree
  | Leaf  lhs.sval   = @lhs.ival1  + ... + @lhs.ivaln  
  | Node  lhs.sval   = @left.sval + @right.sval

SEM Root
  | Root  tree.ival1  =  1
  | Root  tree.ival2  =  0
  ...
  | Root  tree.ivaln  =  0

{

genTree 0 = sem_Tree_Leaf $ 2
genTree n = sem_Tree_Node (genTree $ n-1) (genTree $ n-1)

                 
main = do
        (cant:_) <- getArgs
        let p = cpuTimePrecision
        t1 <- getCPUTime
        print  $ (sem_Root_Root (genTree (read cant))) 
        t2 <- getCPUTime
        print $ (t2 - t1) `div` p

}