Sum Inh S

Center

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


DATA Root
   | Root  tree: Tree

DATA Tree
   | Node  c1:  Tree ... cn:  Tree 
   | Leaf  value: Int

ATTR Tree Root [ | | sval  USE {+} {0} : Int ]
ATTR Tree  [ ival : Int | | ]


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

SEM Tree
  | Leaf  lhs.sval   = @lhs.ival 


SEM Root
  | Root  tree.ival  =  0



{

genTree 0 = sem_Tree_Leaf $ sem_Lit 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)) InhG_Root) # att_sval) 
        t2 <- getCPUTime
        print $ (t2 - t1) `div` p

}