forked from GitHub/gf-core
finding labels behind selections in GFCC
This commit is contained in:
@@ -147,10 +147,19 @@ paramValues cgr = (labels,untyps,typs) where
|
|||||||
untyps = Map.fromList $ concatMap Map.toList [typ | (_,typ) <- Map.toList typs]
|
untyps = Map.fromList $ concatMap Map.toList [typ | (_,typ) <- Map.toList typs]
|
||||||
lincats = [(cat,ls) | (_,(cat,CncCat (RecType ls) _ _)) <- jments]
|
lincats = [(cat,ls) | (_,(cat,CncCat (RecType ls) _ _)) <- jments]
|
||||||
labels = Map.fromList $ concat
|
labels = Map.fromList $ concat
|
||||||
[((cat,[lab]),i):[((cat,[lab,lab2]),j) |
|
[((cat,[lab]),i):
|
||||||
RecType rs <- [typ], (Lbg lab2 _,j) <- zip rs [0..]]
|
[((cat,[lab,lab2]),j) |
|
||||||
|
RecType rs <- [typ], (Lbg lab2 _,j) <- zip rs [0..]] ++
|
||||||
|
[((cat,[lab,L (IC ("_")),lab2]),j) |
|
||||||
|
rs <- getRec typ, (Lbg lab2 _,j) <- zip rs [0..]]
|
||||||
|
|
|
|
||||||
(cat,ls) <- lincats, (Lbg lab typ,i) <- zip ls [0..]]
|
(cat,ls) <- lincats, (Lbg lab typ,i) <- zip ls [0..]]
|
||||||
|
---- this should be made recursive to give lists of any length
|
||||||
|
where
|
||||||
|
getRec typ = case typ of
|
||||||
|
Table _ (RecType rs) -> [rs]
|
||||||
|
Table _ t -> getRec t
|
||||||
|
_ -> []
|
||||||
|
|
||||||
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
|
||||||
@@ -173,7 +182,17 @@ term2term cgr env@(labels,untyps,typs) tr = case tr of
|
|||||||
P p@(P x@(Arg (A cat i)) lab1) lab2 ->
|
P p@(P x@(Arg (A cat i)) lab1) lab2 ->
|
||||||
P (r2r p) . mkLab $ maybe (prtTrace tr $ 66664) id $
|
P (r2r p) . mkLab $ maybe (prtTrace tr $ 66664) id $
|
||||||
Map.lookup (cat,[lab1,lab2]) labels
|
Map.lookup (cat,[lab1,lab2]) labels
|
||||||
P a lab -> P (t2t a) $ mkLab (prtTrace tr 66665)
|
P p lab2 -> case getLab p of
|
||||||
|
Just (cat,lab1) -> P (r2r p) . mkLab $ maybe (prtTrace tr $ 66664) id $
|
||||||
|
Map.lookup (cat,[lab1,L (IC ("_")),lab2]) labels
|
||||||
|
_ -> P (t2t p) $ mkLab (prtTrace tr 66665)
|
||||||
|
P p lab2 -> P (t2t p) $ mkLab (prtTrace tr 66665)
|
||||||
|
_ -> tr ----
|
||||||
|
---- this should be made recursive
|
||||||
|
getLab tr = case tr of
|
||||||
|
S (P (Arg (A cat i)) lab1) _ -> return (cat,lab1)
|
||||||
|
S p _ -> getLab p
|
||||||
|
_ -> Nothing
|
||||||
mkLab k = L (IC ("_" ++ show k))
|
mkLab k = L (IC ("_" ++ show k))
|
||||||
valNum tr = maybe (K (KS (A.prt tr +++ prtTrace tr "66667"))) EInt $
|
valNum tr = maybe (K (KS (A.prt tr +++ prtTrace tr "66667"))) EInt $
|
||||||
Map.lookup tr untyps
|
Map.lookup tr untyps
|
||||||
|
|||||||
@@ -13,3 +13,8 @@ GFCC, 6/9/2006
|
|||||||
66664 2
|
66664 2
|
||||||
66665 125 missing: (VP.s!vf).fin
|
66665 125 missing: (VP.s!vf).fin
|
||||||
66668 1
|
66668 1
|
||||||
|
|
||||||
|
|
||||||
|
66661/3 24 same lines:
|
||||||
|
66664 2
|
||||||
|
66668 1
|
||||||
|
|||||||
Reference in New Issue
Block a user