Sum Syn

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  [ | | sval2, ..., svaln : Int ]

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



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

...

SEM Tree
  | Leaf  lhs.svaln   = @value
  | Node  lhs.svaln   = @left.svaln + @right.svaln

{
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
}