diff options
| author | krasimir <krasimir@chalmers.se> | 2008-05-29 11:20:40 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2008-05-29 11:20:40 +0000 |
| commit | 4d1809ef2d824eb6e80fc1bf1d0f5e0aaf23ec16 (patch) | |
| tree | 27ee41601072eef54efb89f17f0c6d28ba639660 /src-3.0/GF/Parsing/FCFG | |
| parent | bc578a087112a2d6bb6216ad44dadd776bb1b349 (diff) | |
Simplify the Input type. Remove Edge and use only Range type
Diffstat (limited to 'src-3.0/GF/Parsing/FCFG')
| -rw-r--r-- | src-3.0/GF/Parsing/FCFG/Active.hs | 11 | ||||
| -rw-r--r-- | src-3.0/GF/Parsing/FCFG/PInfo.hs | 1 | ||||
| -rw-r--r-- | src-3.0/GF/Parsing/FCFG/Range.hs | 50 |
3 files changed, 5 insertions, 57 deletions
diff --git a/src-3.0/GF/Parsing/FCFG/Active.hs b/src-3.0/GF/Parsing/FCFG/Active.hs index 498054eee..9d4a0ac0c 100644 --- a/src-3.0/GF/Parsing/FCFG/Active.hs +++ b/src-3.0/GF/Parsing/FCFG/Active.hs @@ -20,7 +20,6 @@ import GF.Formalism.Utilities import GF.Infra.PrintClass -import GF.Parsing.FCFG.Range import GF.Parsing.FCFG.PInfo import Control.Monad (guard) @@ -69,8 +68,8 @@ process strategy pinfo toks ((c,item):items) chart = process strategy pinfo toks found' -> let items = do rng <- concatRange rng (found' !! r) return (c, Active found rng lbl (ppos+1) node) in process strategy pinfo toks items chart - FSymTok tok -> let items = do (i,j) <- inputToken toks ? tok - rng' <- concatRange rng (makeRange i j) + FSymTok tok -> let items = do t_rng <- inputToken toks ? tok + rng' <- concatRange rng t_rng return (cat, Active found rng' lbl (ppos+1) node) in process strategy pinfo toks items chart | otherwise = @@ -143,7 +142,7 @@ xchart2syntaxchart (XChart actives finals) pinfo = literals :: FCFPInfo -> Input FToken -> [(FCat,Item)] literals pinfo toks = - [let (c,node) = lexer t in (c,Final [makeRange i j] node) | Edge i j t <- inputEdges toks, not (t `elem` grammarToks pinfo)] + [let (c,node) = lexer t in (c,Final [rng] node) | (t,rngs) <- aAssocs (inputToken toks), rng <- rngs, not (t `elem` grammarToks pinfo)] where lexer t = case reads t of @@ -172,8 +171,8 @@ initialBU pinfo toks = do (tok,rngs) <- aAssocs (inputToken toks) ruleid <- leftcornerTokens pinfo ? tok let FRule _ _ _ cat _ = allRules pinfo ! ruleid - (i,j) <- rngs - return (cat,Active [] (makeRange i j) 0 1 (emptyChildren ruleid pinfo)) + rng <- rngs + return (cat,Active [] rng 0 1 (emptyChildren ruleid pinfo)) ++ do ruleid <- epsilonRules pinfo let FRule _ _ _ cat _ = allRules pinfo ! ruleid diff --git a/src-3.0/GF/Parsing/FCFG/PInfo.hs b/src-3.0/GF/Parsing/FCFG/PInfo.hs index dc934c1e5..08d40df85 100644 --- a/src-3.0/GF/Parsing/FCFG/PInfo.hs +++ b/src-3.0/GF/Parsing/FCFG/PInfo.hs @@ -14,7 +14,6 @@ import GF.Formalism.Utilities import GF.Formalism.FCFG import GF.Data.SortedList import GF.Data.Assoc -import GF.Parsing.FCFG.Range import GF.GFCC.CId import Data.Array diff --git a/src-3.0/GF/Parsing/FCFG/Range.hs b/src-3.0/GF/Parsing/FCFG/Range.hs deleted file mode 100644 index 24674f58b..000000000 --- a/src-3.0/GF/Parsing/FCFG/Range.hs +++ /dev/null @@ -1,50 +0,0 @@ ---------------------------------------------------------------------- --- | --- Maintainer : Krasimir Angelov --- Stability : (stable) --- Portability : (portable) --- --- Definitions of ranges, and operations on ranges ------------------------------------------------------------------------------ - -module GF.Parsing.FCFG.Range - ( RangeRec, Range(..), makeRange, concatRange, rangeEdge, edgeRange, minRange, maxRange, - ) where - - --- GF modules -import GF.Formalism.Utilities -import GF.Infra.PrintClass - ------------------------------------------------------------- --- ranges as single pairs - -type RangeRec = [Range] - -data Range = Range {-# UNPACK #-} !Int {-# UNPACK #-} !Int - | EmptyRange - deriving (Eq, Ord) - -makeRange :: Int -> Int -> Range -makeRange = Range - -concatRange :: Range -> Range -> [Range] -concatRange EmptyRange rng = return rng -concatRange rng EmptyRange = return rng -concatRange (Range i j) (Range j' k) = [Range i k | j==j'] - -rangeEdge :: a -> Range -> Edge a -rangeEdge a (Range i j) = Edge i j a - -edgeRange :: Edge a -> Range -edgeRange (Edge i j _) = Range i j - -minRange :: Range -> Int -minRange (Range i j) = i - -maxRange :: Range -> Int -maxRange (Range i j) = j - -instance Print Range where - prt (Range i j) = "(" ++ show i ++ "-" ++ show j ++ ")" - prt (EmptyRange) = "(?)" |
