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
}