forked from GitHub/gf-core
Founding the newly structured GF2.0 cvs archive.
This commit is contained in:
46
src/GF/UseGrammar/GetTree.hs
Normal file
46
src/GF/UseGrammar/GetTree.hs
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user