Sum Syn 20

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, sval3, sval4, sval5, sval6, sval7, sval8, sval9, sval10, 
                 sval11, sval12, sval13, sval14, sval15, sval16, sval17, sval18, 
                 sval19, sval20 USE {+} {0}  : Int ]


SEM Root
  | Root  lhs.sval   =  @tree.sval    + @tree.sval2   + @tree.sval3   + @tree.sval4   + @tree.sval5  
                            + @tree.sval6   + @tree.sval7   + @tree.sval8   + @tree.sval9   + @tree.sval10 
                            + @tree.sval11 + @tree.sval12 + @tree.sval13  + @tree.sval14 + @tree.sval15 
                            + @tree.sval16 + @tree.sval17 + @tree.sval18  + @tree.sval19 + @tree.sval20



SEM Tree
  | Leaf  lhs.sval   = @value
  | Leaf  lhs.sval2   = @value
  | Leaf  lhs.sval3   = @value
  | Leaf  lhs.sval4   = @value
  | Leaf  lhs.sval5   = @value
  | Leaf  lhs.sval6   = @value
  | Leaf  lhs.sval7   = @value
  | Leaf  lhs.sval8   = @value
  | Leaf  lhs.sval9   = @value
  | Leaf  lhs.sval10   = @value
  | Leaf  lhs.sval11   = @value
  | Leaf  lhs.sval12   = @value
  | Leaf  lhs.sval13   = @value
  | Leaf  lhs.sval14   = @value
  | Leaf  lhs.sval15   = @value
  | Leaf  lhs.sval16   = @value
  | Leaf  lhs.sval17   = @value
  | Leaf  lhs.sval18   = @value
  | Leaf  lhs.sval19   = @value
  | Leaf  lhs.sval20   = @value


{

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

}