diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2006-06-01 11:19:47 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2006-06-01 11:19:47 +0000 |
| commit | e51eaed4fde9f2bee962ed43f5b9a8592e76a947 (patch) | |
| tree | 8f1b3bb01373d052ecfa1f883a37ffe2d765977a /src/GF/Parsing/GFC.hs | |
| parent | 496f1fc8767f9d8ce1bb69b6e6460c2b7b7dd4b4 (diff) | |
add the FCFG parser
Diffstat (limited to 'src/GF/Parsing/GFC.hs')
| -rw-r--r-- | src/GF/Parsing/GFC.hs | 31 |
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 |
