From 394050d9f7d90f5b7a5905175bd51733048bf481 Mon Sep 17 00:00:00 2001 From: aarne Date: Sun, 5 Oct 2008 19:49:26 +0000 Subject: added a command for tree operations and started a module for defining them --- src/GF/Command/TreeOperations.hs | 58 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/GF/Command/TreeOperations.hs (limited to 'src/GF/Command/TreeOperations.hs') diff --git a/src/GF/Command/TreeOperations.hs b/src/GF/Command/TreeOperations.hs new file mode 100644 index 000000000..88b962bdc --- /dev/null +++ b/src/GF/Command/TreeOperations.hs @@ -0,0 +1,58 @@ +module GF.Command.TreeOperations ( + treeOp, + allTreeOps + --typeCheck, + --compute + ) where + +import GF.Compile.TypeCheck +import GF.Compile.AbsCompute + +-- for conversions +import PGF.Data +--import GF.Compile.GrammarToGFCC (mkType,mkExp) +import GF.Grammar.Grammar + + +type TreeOp = [Tree] -> [Tree] + +treeOp :: String -> Maybe TreeOp +treeOp f = fmap snd $ lookup f allTreeOps + +allTreeOps :: [(String,(String,TreeOp))] +allTreeOps = [ + ("compute",("compute by using semantic definitions (def)", + id)), + ("smallest",("sort trees from smallest to largest, in number of nodes", + id)), + ("typecheck",("type check and solve metavariables; reject if incorrect", + id)) + ] + +typeCheck :: PGF -> Tree -> (Tree,(Bool,[String])) +typeCheck pgf t = (t,(True,[])) + +compute :: PGF -> Tree -> Tree +compute pgf t = t + + + +{- +data Tree = + Abs [CId] Tree -- ^ lambda abstraction. The list of variables is non-empty + | Var CId -- ^ variable + | Fun CId [Tree] -- ^ function application + | Lit Literal -- ^ literal + | Meta Int -- ^ meta variable + +data Literal = + LStr String -- ^ string constant + | LInt Integer -- ^ integer constant + | LFlt Double -- ^ floating point constant + +mkType :: A.Type -> C.Type +mkType t = case GM.typeForm t of + Ok (hyps,(_,cat),args) -> C.DTyp (mkContext hyps) (i2i cat) (map mkExp args) + +mkExp :: A.Term -> C.Expr +-} -- cgit v1.2.3