summaryrefslogtreecommitdiff
path: root/src-3.0/GF/Parsing/FCFG
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2008-05-29 11:20:40 +0000
committerkrasimir <krasimir@chalmers.se>2008-05-29 11:20:40 +0000
commit4d1809ef2d824eb6e80fc1bf1d0f5e0aaf23ec16 (patch)
tree27ee41601072eef54efb89f17f0c6d28ba639660 /src-3.0/GF/Parsing/FCFG
parentbc578a087112a2d6bb6216ad44dadd776bb1b349 (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.hs11
-rw-r--r--src-3.0/GF/Parsing/FCFG/PInfo.hs1
-rw-r--r--src-3.0/GF/Parsing/FCFG/Range.hs50
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) = "(?)"