diff options
| author | aarne <unknown> | 2003-09-22 13:16:55 +0000 |
|---|---|---|
| committer | aarne <unknown> | 2003-09-22 13:16:55 +0000 |
| commit | b1402e8bd6a68a891b00a214d6cf184d66defe19 (patch) | |
| tree | 90372ac4e53dce91cf949dbf8e93be06f1d9e8bd /src/GF/UseGrammar/GetTree.hs | |
Founding the newly structured GF2.0 cvs archive.
Diffstat (limited to 'src/GF/UseGrammar/GetTree.hs')
| -rw-r--r-- | src/GF/UseGrammar/GetTree.hs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/GF/UseGrammar/GetTree.hs b/src/GF/UseGrammar/GetTree.hs new file mode 100644 index 000000000..9b545c7dd --- /dev/null +++ b/src/GF/UseGrammar/GetTree.hs @@ -0,0 +1,46 @@ +module GetTree where + +import GFC +import Values +import qualified Grammar as G +import Ident +import MMacros +import Macros +import Rename +import TypeCheck +import PGrammar +import ShellState + +import Operations + +-- how to form linearizable trees from strings and from terms of different levels +-- +-- String --> raw Term --> annot, qualif Term --> Tree + +string2tree :: StateGrammar -> String -> Tree +string2tree gr = errVal uTree . string2treeErr gr + +string2treeErr :: StateGrammar -> String -> Err Tree +string2treeErr gr s = do + t <- pTerm s + let t1 = refreshMetas [] t + let t2 = qualifTerm abstr t1 + annotate grc t2 + where + abstr = absId gr + grc = grammar gr + +string2Cat, string2Fun :: StateGrammar -> String -> (Ident,Ident) +string2Cat gr c = (absId gr,identC c) +string2Fun = string2Cat + +strings2Cat, strings2Fun :: String -> (Ident,Ident) +strings2Cat s = (identC m, identC (drop 1 c)) where (m,c) = span (/= '.') s +strings2Fun = strings2Cat + +string2ref :: StateGrammar -> String -> Err G.Term +string2ref _ ('x':'_':ds) = return $ freshAsTerm ds --- hack for generated vars +string2ref gr s = + if elem '.' s + then return $ uncurry G.Q $ strings2Fun s + else return $ G.Vr $ identC s |
