summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2006-06-19 20:17:05 +0000
committerkr.angelov <kr.angelov@gmail.com>2006-06-19 20:17:05 +0000
commitcb168e92e23d0f620b75f6119a4cb298360e6f21 (patch)
treec407d5a2aa1bad5f218539fab79556eb8129d855 /src
parent694f6eb984c8f22fe042e210b0671062accba8c7 (diff)
Sync FCFG with the latest repo version
Diffstat (limited to 'src')
-rw-r--r--src/GF/Parsing/FCFG/Active.hs38
-rw-r--r--src/GF/Parsing/MCFG/FastActive.hs5
2 files changed, 16 insertions, 27 deletions
diff --git a/src/GF/Parsing/FCFG/Active.hs b/src/GF/Parsing/FCFG/Active.hs
index b8901d3e8..1b6673cd7 100644
--- a/src/GF/Parsing/FCFG/Active.hs
+++ b/src/GF/Parsing/FCFG/Active.hs
@@ -37,9 +37,8 @@ import Data.Array
parse :: (Ord c, Ord n, Ord t) => String -> FCFParser c n t
parse strategy pinfo starts toks = xchart2syntaxchart chart pinfo
where chart = process strategy pinfo toks axioms emptyXChart
-
- axioms | isBU strategy = terminal pinfo toks ++ initialScan pinfo toks
- | isTD strategy = initial pinfo starts toks
+ axioms | isBU strategy = literals pinfo toks ++ initialBU pinfo toks
+ | isTD strategy = literals pinfo toks ++ initialTD pinfo starts toks
isBU s = s=="b"
isTD s = s=="t"
@@ -149,13 +148,16 @@ xchart2syntaxchart (XChart actives finals) pinfo =
| (cat, Final found node) <- chartAssocs finals
]
+literals :: (Ord c, Ord n, Ord t) => FCFPInfo c n t -> Input t -> [(c,Item)]
+literals pinfo toks =
+ [let (c,node) = grammarLexer pinfo t in (c,Final [makeRange i j] node) | Edge i j t <- inputEdges toks, not (t `elem` grammarToks pinfo)]
+
----------------------------------------------------------------------
-- Earley --
--- anropas med alla startkategorier
-initial :: (Ord c, Ord n, Ord t) => FCFPInfo c n t -> [c] -> Input t -> [Item]
-initial pinfo starts toks =
- tracePrt "MCFG.Active (Earley) - initial rules" (prt . length) $
+-- called with all starting categories
+initialTD :: (Ord c, Ord n, Ord t) => FCFPInfo c n t -> [c] -> Input t -> [(c,Item)]
+initialTD pinfo starts toks =
do cat <- starts
ruleid <- topdownRules pinfo ? cat
return (cat,Active [] (Range 0 0) 0 0 (emptyChildren ruleid pinfo))
@@ -164,24 +166,10 @@ initial pinfo starts toks =
----------------------------------------------------------------------
-- Kilbury --
-terminal :: (Ord c, Ord n, Ord t) => FCFPInfo c n t -> Input t -> [Item]
-terminal pinfo toks =
- tracePrt "MCFG.Active (Kilbury) - initial terminal rules" (prt . length) $
- do ruleid <- emptyRules pinfo
- let FRule abs lins = allRules pinfo ! ruleid
- rrec <- mapM (rangeRestSyms toks EmptyRange . elems) (elems lins)
- return $ Final ruleid rrec []
- where
- rangeRestSyms toks rng [] = return rng
- rangeRestSyms toks rng (FSymTok tok:syms) = do (i,j) <- inputToken toks ? tok
- rng' <- concatRange rng (makeRange i j)
- rangeRestSyms toks rng' syms
-
-initialScan :: (Ord c, Ord n, Ord t) => FCFPInfo c n t -> Input t -> [Item]
-initialScan pinfo toks =
- tracePrt "MCFG.Active (Kilbury) - initial scanned rules" (prt . length) $
+initialBU :: (Ord c, Ord n, Ord t) => FCFPInfo c n t -> Input t -> [(c,Item)]
+initialBU pinfo toks =
do tok <- aElems (inputToken toks)
ruleid <- leftcornerTokens pinfo ? tok ++
epsilonRules pinfo
- let FRule abs lins = allRules pinfo ! ruleid
- return $ Active ruleid [] EmptyRange 0 0 (emptyChildren abs)
+ let FRule (Abs cat _ _) _ = allRules pinfo ! ruleid
+ return (cat,Active [] EmptyRange 0 0 (emptyChildren ruleid pinfo))
diff --git a/src/GF/Parsing/MCFG/FastActive.hs b/src/GF/Parsing/MCFG/FastActive.hs
index de33172d2..0a8e24b55 100644
--- a/src/GF/Parsing/MCFG/FastActive.hs
+++ b/src/GF/Parsing/MCFG/FastActive.hs
@@ -39,8 +39,9 @@ import Data.Array
-- parse :: (Ord c, Ord n, Ord l, Ord t) => String -> MCFParser c n l t
parse strategy pinfo starts =
- [ Abs (cat, found) (zip rhs rrecs) fun |
- Final (Abs cat rhs fun) found rrecs <- listXChartFinal chart ]
+ accumAssoc groupSyntaxNodes $
+ [ ((cat, found), SNode fun (zip rhs rrecs)) |
+ Final (Abs cat rhs fun) found rrecs <- listXChartFinal chart ]
where chart = process strategy pinfo axioms emptyXChart
-- axioms | isBU strategy = terminal pinfo toks ++ initialScan pinfo toks