summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2008-10-15 08:02:12 +0000
committerkrasimir <krasimir@chalmers.se>2008-10-15 08:02:12 +0000
commit4fa3eb87cd31aede8707ec9e2a32ef7c1405c739 (patch)
treebb5d2a341c202fd0de64e85c2ce18f26c12f12e9
parent5f33e0bda955c66aa81356c6636ec65d9a40bc2e (diff)
generate metavariables in the tree extraction for PMCFG
-rw-r--r--src/PGF/Parsing/FCFG/Incremental.hs25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/PGF/Parsing/FCFG/Incremental.hs b/src/PGF/Parsing/FCFG/Incremental.hs
index 8dc3c3da5..12063f2a9 100644
--- a/src/PGF/Parsing/FCFG/Incremental.hs
+++ b/src/PGF/Parsing/FCFG/Incremental.hs
@@ -108,18 +108,19 @@ extractExps (State pinfo chart items) start = exps
let FFun fn _ lins = functions pinfo ! funid
lbl <- indices lins
Just fid <- [lookupPC (PK cat lbl 0) (passive st)]
- go Set.empty fid
-
- go rec fcat
- | Set.member fcat rec = mzero
- | otherwise = foldForest (\funid args trees ->
- do let FFun fn _ lins = functions pinfo ! funid
- args <- mapM (go (Set.insert fcat rec)) args
- return (Fun fn args)
- `mplus`
- trees)
- (\lit _ trees -> Lit lit : trees)
- [] fcat (forest st)
+ go Set.empty 0 (0,fid)
+
+ go rec fcat' (d,fcat)
+ | fcat < totalCats pinfo = [Meta (fcat'*10+d)] -- FIXME: here we assume that every rule has at most 10 arguments
+ | Set.member fcat rec = mzero
+ | otherwise = foldForest (\funid args trees ->
+ do let FFun fn _ lins = functions pinfo ! funid
+ args <- mapM (go (Set.insert fcat rec) fcat) (zip [0..] args)
+ return (Fun fn args)
+ `mplus`
+ trees)
+ (\lit _ trees -> Lit lit : trees)
+ [] fcat (forest st)
process fn !seqs !funs [] acc chart = (acc,chart)