summaryrefslogtreecommitdiff
path: root/src/GF/Parsing/GFC.hs
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2006-06-01 11:19:47 +0000
committerkr.angelov <kr.angelov@gmail.com>2006-06-01 11:19:47 +0000
commite51eaed4fde9f2bee962ed43f5b9a8592e76a947 (patch)
tree8f1b3bb01373d052ecfa1f883a37ffe2d765977a /src/GF/Parsing/GFC.hs
parent496f1fc8767f9d8ce1bb69b6e6460c2b7b7dd4b4 (diff)
add the FCFG parser
Diffstat (limited to 'src/GF/Parsing/GFC.hs')
-rw-r--r--src/GF/Parsing/GFC.hs31
1 files changed, 25 insertions, 6 deletions
diff --git a/src/GF/Parsing/GFC.hs b/src/GF/Parsing/GFC.hs
index 8f79bab01..e87b45590 100644
--- a/src/GF/Parsing/GFC.hs
+++ b/src/GF/Parsing/GFC.hs
@@ -37,23 +37,29 @@ import qualified GF.Formalism.SimpleGFC as S
import qualified GF.Formalism.MCFG as M
import qualified GF.Formalism.CFG as C
import qualified GF.Parsing.MCFG as PM
+import qualified GF.Parsing.FCFG as PF
import qualified GF.Parsing.CFG as PC
----------------------------------------------------------------------
-- parsing information
-data PInfo = PInfo { mcfPInfo :: MCFPInfo,
- cfPInfo :: CFPInfo }
+data PInfo = PInfo { mcfPInfo :: MCFPInfo
+ , fcfPInfo :: FCFPInfo
+ , cfPInfo :: CFPInfo
+ }
type MCFPInfo = PM.MCFPInfo MCat Name MLabel Token
+type FCFPInfo = PF.FCFPInfo FCat Name Token
type CFPInfo = PC.CFPInfo CCat Name Token
-buildPInfo :: MGrammar -> CGrammar -> PInfo
-buildPInfo mcfg cfg = PInfo { mcfPInfo = PM.buildMCFPInfo mcfg,
- cfPInfo = PC.buildCFPInfo cfg }
+buildPInfo :: MGrammar -> FGrammar -> CGrammar -> PInfo
+buildPInfo mcfg fcfg cfg = PInfo { mcfPInfo = PM.buildMCFPInfo mcfg
+ , fcfPInfo = PF.buildFCFPInfo fcfg
+ , cfPInfo = PC.buildCFPInfo cfg
+ }
instance Print PInfo where
- prt (PInfo m c) = prt m ++ "\n" ++ prt c
+ prt (PInfo m f c) = prt m ++ "\n" ++ prt c
----------------------------------------------------------------------
-- main parsing function
@@ -114,6 +120,19 @@ selectParser "m" strategy pinfo startCat inTokens
cat@(MCat _ [lbl]) <- startCats ]
return $ chart2forests chart (const False) finalEdges
+-- parsing via FCFG
+selectParser "f" strategy pinfo startCat inTokens
+ = do let startCats = filter isStart $ PF.grammarCats fcfpi
+ isStart cat = fcat2scat cat == cfCat2Ident startCat
+ fcfpi = fcfPInfo pinfo
+ fcfParser <- PF.parseFCF strategy
+ let fcfChart = fcfParser fcfpi startCats inTokens
+ chart = G.abstract2chart fcfChart
+ (begin,end) = inputBounds inTokens
+ finalEdges = [ PF.makeFinalEdge cat begin end |
+ cat@(FCat _ _ [lbl] _) <- startCats ]
+ return $ chart2forests chart (const False) finalEdges
+
-- error parser:
selectParser prs strategy _ _ _ = Bad $ "Parser '" ++ prs ++ "' not defined with strategy: " ++ strategy