forked from GitHub/gf-core
some fixes in gfcc compilation
This commit is contained in:
@@ -182,7 +182,7 @@ paramValues cgr = (labels,untyps,typs) where
|
|||||||
[(cat,ls) | (_,(cat,CncCat (RecType ls) _ _)) <- jments]
|
[(cat,ls) | (_,(cat,CncCat (RecType ls) _ _)) <- jments]
|
||||||
labels = Map.fromList $ concat
|
labels = Map.fromList $ concat
|
||||||
[((cat,[lab]),(typ,i)):
|
[((cat,[lab]),(typ,i)):
|
||||||
[((cat,[lab2,lab]),(ty,j)) |
|
[((cat,[lab,lab2]),(ty,j)) |
|
||||||
rs <- getRec typ, (Lbg lab2 ty,j) <- zip rs [0..]]
|
rs <- getRec typ, (Lbg lab2 ty,j) <- zip rs [0..]]
|
||||||
|
|
|
|
||||||
(cat,ls) <- lincats, (Lbg lab typ,i) <- zip ls [0..]]
|
(cat,ls) <- lincats, (Lbg lab typ,i) <- zip ls [0..]]
|
||||||
@@ -197,7 +197,7 @@ paramValues cgr = (labels,untyps,typs) where
|
|||||||
term2term :: CanonGrammar -> ParamEnv -> Term -> Term
|
term2term :: CanonGrammar -> ParamEnv -> Term -> Term
|
||||||
term2term cgr env@(labels,untyps,typs) tr = case tr of
|
term2term cgr env@(labels,untyps,typs) tr = case tr of
|
||||||
Par _ _ -> mkValCase tr
|
Par _ _ -> mkValCase tr
|
||||||
R rs | any (isStr . trmAss) rs ->
|
R rs -> ---- | any (isStr . trmAss) rs ->
|
||||||
R [Ass (mkLab i) (t2t t) | (i,Ass l t) <- zip [0..] rs, not (isLock l t)]
|
R [Ass (mkLab i) (t2t t) | (i,Ass l t) <- zip [0..] rs, not (isLock l t)]
|
||||||
R rs -> valNum tr
|
R rs -> valNum tr
|
||||||
P t l -> r2r tr
|
P t l -> r2r tr
|
||||||
@@ -219,7 +219,7 @@ term2term cgr env@(labels,untyps,typs) tr = case tr of
|
|||||||
Arg (A cat _) -> return (cat,[])
|
Arg (A cat _) -> return (cat,[])
|
||||||
P p lab2 -> do
|
P p lab2 -> do
|
||||||
(cat,labs) <- getLab p
|
(cat,labs) <- getLab p
|
||||||
return (cat,lab2:labs)
|
return (cat,labs++[lab2])
|
||||||
S p _ -> getLab p
|
S p _ -> getLab p
|
||||||
_ -> Bad "getLab"
|
_ -> Bad "getLab"
|
||||||
|
|
||||||
@@ -249,7 +249,8 @@ term2term cgr env@(labels,untyps,typs) tr = case tr of
|
|||||||
let tr' = LI $ identC $ show k
|
let tr' = LI $ identC $ show k
|
||||||
let tyvs = case Map.lookup (cat,lab) labels of
|
let tyvs = case Map.lookup (cat,lab) labels of
|
||||||
Just (ty,_) -> case Map.lookup ty typs of
|
Just (ty,_) -> case Map.lookup ty typs of
|
||||||
Just vs -> (ty,Map.keys vs)
|
Just vs -> (ty,[t |
|
||||||
|
(t,_) <- sortBy (\x y -> compare (snd x) (snd y)) (Map.assocs vs)])
|
||||||
_ -> error $ A.prt ty
|
_ -> error $ A.prt ty
|
||||||
_ -> error $ A.prt tr
|
_ -> error $ A.prt tr
|
||||||
updateSTM ((tyvs, (tr', tr)):)
|
updateSTM ((tyvs, (tr', tr)):)
|
||||||
|
|||||||
@@ -27,11 +27,11 @@ statGFCC gfcc = unlines [
|
|||||||
|
|
||||||
type Concr = Map CId Term
|
type Concr = Map CId Term
|
||||||
|
|
||||||
lookMap :: (Show i, Ord i) => i -> Map i a -> a
|
lookMap :: (Show i, Ord i) => a -> i -> Map i a -> a
|
||||||
lookMap c m = maybe (error ("cannot find " ++ show c)) id $ Data.Map.lookup c m
|
lookMap d c m = maybe d id $ Data.Map.lookup c m
|
||||||
|
|
||||||
lookLin :: GFCC -> CId -> CId -> Term
|
lookLin :: GFCC -> CId -> CId -> Term
|
||||||
lookLin mcfg lang fun = lookMap fun $ lookMap lang $ concretes mcfg
|
lookLin mcfg lang fun = lookMap term0 fun $ lookMap undefined lang $ concretes mcfg
|
||||||
|
|
||||||
linearize :: GFCC -> CId -> Exp -> String
|
linearize :: GFCC -> CId -> Exp -> String
|
||||||
linearize mcfg lang = realize . linExp mcfg lang
|
linearize mcfg lang = realize . linExp mcfg lang
|
||||||
@@ -57,6 +57,12 @@ linExp mcfg lang tree@(Tr at trees) =
|
|||||||
comp = compute mcfg lang
|
comp = compute mcfg lang
|
||||||
look = lookLin mcfg lang
|
look = lookLin mcfg lang
|
||||||
|
|
||||||
|
exp0 :: Exp
|
||||||
|
exp0 = Tr (AS "NO_PARSE") []
|
||||||
|
|
||||||
|
term0 :: Term
|
||||||
|
term0 = kks "UNKNOWN_ID"
|
||||||
|
|
||||||
kks :: String -> Term
|
kks :: String -> Term
|
||||||
kks = K . KS
|
kks = K . KS
|
||||||
|
|
||||||
@@ -81,7 +87,7 @@ compute mcfg lang args = compg [] where
|
|||||||
W s t -> W s (comp t)
|
W s t -> W s (comp t)
|
||||||
R ts -> R $ Prelude.map comp ts
|
R ts -> R $ Prelude.map comp ts
|
||||||
V i -> idx args (fromInteger i) -- already computed
|
V i -> idx args (fromInteger i) -- already computed
|
||||||
S ts -> S (Prelude.map comp ts)
|
S ts -> S $ Prelude.filter (/= S []) $ Prelude.map comp ts
|
||||||
F c -> comp $ look c -- global const: not comp'd (if contains argvar)
|
F c -> comp $ look c -- global const: not comp'd (if contains argvar)
|
||||||
FV ts -> FV $ Prelude.map comp ts
|
FV ts -> FV $ Prelude.map comp ts
|
||||||
_ -> trm
|
_ -> trm
|
||||||
|
|||||||
@@ -39,9 +39,11 @@ treat grammar s = case words s of
|
|||||||
_ -> putStrLn "no parse found"
|
_ -> putStrLn "no parse found"
|
||||||
_ -> lins $ readExp s
|
_ -> lins $ readExp s
|
||||||
where
|
where
|
||||||
lins t = mapM_ (lin t) $ cncnames grammar
|
lins t = mapM_ (lint t) $ cncnames grammar
|
||||||
|
lint t lang = do
|
||||||
|
putStrLn $ printTree $ linExp grammar lang t
|
||||||
|
lin t lang
|
||||||
lin t lang = do
|
lin t lang = do
|
||||||
-- putStrLn $ printTree $ linExp grammar lang t
|
|
||||||
putStrLn $ linearize grammar lang t
|
putStrLn $ linearize grammar lang t
|
||||||
prlins t = do
|
prlins t = do
|
||||||
putStrLn $ printTree t
|
putStrLn $ printTree t
|
||||||
@@ -54,7 +56,7 @@ file2gfcc f =
|
|||||||
readFile f >>= err (error "no parse") (return . mkGFCC) . pGrammar . myLexer
|
readFile f >>= err (error "no parse") (return . mkGFCC) . pGrammar . myLexer
|
||||||
|
|
||||||
readExp :: String -> Exp
|
readExp :: String -> Exp
|
||||||
readExp = err (error "no parse") id . (pExp . myLexer)
|
readExp = errVal exp0 . (pExp . myLexer)
|
||||||
|
|
||||||
|
|
||||||
{-
|
{-
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ lincat VP = Verb ;
|
|||||||
oper Noun = {s : NForm => Str} ;
|
oper Noun = {s : NForm => Str} ;
|
||||||
oper Verb = {s : VForm => Str} ;
|
oper Verb = {s : VForm => Str} ;
|
||||||
|
|
||||||
|
-- {-
|
||||||
lincat NP = {s : Case => Str ; n : Number ; p : Person} ;
|
lincat NP = {s : Case => Str ; n : Number ; p : Person} ;
|
||||||
lin Pred np vp = {s = np.s ! Nom ++ vp.s ! VF np.n np.p} ;
|
lin Pred np vp = {s = np.s ! Nom ++ vp.s ! VF np.n np.p} ;
|
||||||
lin Pred2 np vp ob = {s = np.s ! Nom ++ vp.s ! VF np.n np.p ++ ob.s ! Part} ;
|
lin Pred2 np vp ob = {s = np.s ! Nom ++ vp.s ! VF np.n np.p ++ ob.s ! Part} ;
|
||||||
@@ -31,16 +32,19 @@ lin Det no = {s = \\c => no.s ! NF Sg c ; n = Sg ; p = P3} ;
|
|||||||
lin Dets no = {s = \\c => no.s ! NF Pl c ; n = Pl ; p = P3} ;
|
lin Dets no = {s = \\c => no.s ! NF Pl c ; n = Pl ; p = P3} ;
|
||||||
lin Mina = {s = table Case ["minä" ; "minua"] ; n = Sg ; p = P1} ;
|
lin Mina = {s = table Case ["minä" ; "minua"] ; n = Sg ; p = P1} ;
|
||||||
lin Te = {s = table Case ["te" ; "teitä"] ; n = Pl ; p = P2} ;
|
lin Te = {s = table Case ["te" ; "teitä"] ; n = Pl ; p = P2} ;
|
||||||
--lincat NP = {s : Case => Str ; a : {n : Number ; p : Person}} ;
|
-- -}
|
||||||
--lin Pred np vp = {s = np.s ! Nom ++ vp.s ! VF np.a.n np.a.p} ;
|
|
||||||
--lin Pred2 np vp ob = {s = np.s ! Nom ++ vp.s ! VF np.a.n np.a.p ++ ob.s ! Part} ;
|
|
||||||
--lin Det no = {s = \\c => no.s ! NF Sg c ; a = {n = Sg ; p = P3}} ;
|
|
||||||
--lin Dets no = {s = \\c => no.s ! NF Pl c ; a = {n = Pl ; p = P3}} ;
|
|
||||||
--lin Mina = {s = table Case ["minä" ; "minua"] ; a = {n = Sg ; p = P1}} ;
|
|
||||||
--lin Te = {s = table Case ["te" ; "teitä"] ; a = {n = Pl ; p = P2}} ;
|
|
||||||
|
|
||||||
|
{-
|
||||||
|
lincat NP = {s : Case => Str ; a : {n : Number ; p : Person}} ;
|
||||||
|
lin Pred np vp = {s = np.s ! Nom ++ vp.s ! VF np.a.n np.a.p} ;
|
||||||
|
lin Pred2 np vp ob = {s = np.s ! Nom ++ vp.s ! VF np.a.n np.a.p ++ ob.s ! Part} ;
|
||||||
|
lin Det no = {s = \\c => no.s ! NF Sg c ; a = {n = Sg ; p = P3}} ;
|
||||||
|
lin Dets no = {s = \\c => no.s ! NF Pl c ; a = {n = Pl ; p = P3}} ;
|
||||||
|
lin Mina = {s = table Case ["minä" ; "minua"] ; a = {n = Sg ; p = P1}} ;
|
||||||
|
lin Te = {s = table Case ["te" ; "teitä"] ; a = {n = Pl ; p = P2}} ;
|
||||||
|
-}
|
||||||
|
|
||||||
lin Raha = mkN "raha" ;
|
lin Raha = mkN "raha" ;
|
||||||
lin Paska = mkN "paska" ;
|
lin Paska = mkN "paska" ;
|
||||||
lin Pallo = mkN "pallo" ;
|
lin Pallo = mkN "pallo" ;
|
||||||
lin Puhua = mkV "puhu" ;
|
lin Puhua = mkV "puhu" ;
|
||||||
|
|||||||
Reference in New Issue
Block a user