diff options
| author | aarne <aarne@cs.chalmers.se> | 2007-09-20 09:48:50 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2007-09-20 09:48:50 +0000 |
| commit | 8bf5ff0a9423be908502a0ad4c5f91ff00f342e4 (patch) | |
| tree | 8779d31df9b96888fd802c2b1eaa29055ba2bdec /src/GF/Canon/GFCC/GFCCAPI.hs | |
| parent | 3707eb45762932b22d96ad03163c46dd1ba9fd8d (diff) | |
embedded parser in MultiGrammar in GFCCAPI
Diffstat (limited to 'src/GF/Canon/GFCC/GFCCAPI.hs')
| -rw-r--r-- | src/GF/Canon/GFCC/GFCCAPI.hs | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/GF/Canon/GFCC/GFCCAPI.hs b/src/GF/Canon/GFCC/GFCCAPI.hs index 5630f97ea..211f9f67b 100644 --- a/src/GF/Canon/GFCC/GFCCAPI.hs +++ b/src/GF/Canon/GFCC/GFCCAPI.hs @@ -22,6 +22,8 @@ import GF.Canon.GFCC.ParGFCC import GF.Canon.GFCC.PrintGFCC import GF.Canon.GFCC.ErrM import GF.Canon.GFCC.FCFGParsing +import GF.Conversion.SimpleToFCFG (convertGrammarCId,FCat(..)) + --import GF.Data.Operations --import GF.Infra.UseIO import qualified Data.Map as Map @@ -37,7 +39,7 @@ import System -- Interface --------------------------------------------------- -type MultiGrammar = GFCC +data MultiGrammar = MultiGrammar {gfcc :: GFCC, parsers :: [(Language,FCFPInfo)]} type Language = String type Category = String type Tree = Exp @@ -65,14 +67,18 @@ startCat :: MultiGrammar -> Category -- Implementation --------------------------------------------------- -file2grammar f = - readFileIf f >>= err (error "no parse") (return . mkGFCC) . pGrammar . myLexer +file2grammar f = do + gfcc <- file2gfcc f + let fcfgs = convertGrammarCId gfcc + return (MultiGrammar gfcc [(lang, buildPInfo fcfg) | (CId lang,fcfg) <- fcfgs]) -linearize mgr lang = GF.Canon.GFCC.DataGFCC.linearize mgr (CId lang) +file2gfcc f = + readFileIf f >>= err (error "no parse") (return . mkGFCC) . pGrammar . myLexer +linearize mgr lang = GF.Canon.GFCC.DataGFCC.linearize (gfcc mgr) (CId lang) parse mgr lang cat s = - err error id $ parserLang mgr (CId lang) (CId cat) (words s) + err error id $ parserLang (gfcc mgr) (CId lang) (CId cat) (words s) {- map tree2exp . @@ -85,7 +91,8 @@ parse mgr lang cat s = -} linearizeAll mgr = map snd . linearizeAllLang mgr -linearizeAllLang mgr t = [(lang,linearThis mgr lang t) | lang <- languages mgr] +linearizeAllLang mgr t = + [(lang,linearThis mgr lang t) | lang <- languages mgr] {- parseAll mgr cat = map snd . parseAllLang mgr cat @@ -98,9 +105,9 @@ readTree _ = err (const exp0) id . (pExp . myLexer) showTree t = printTree t -languages mgr = [l | CId l <- cncnames mgr] +languages mgr = [l | CId l <- cncnames (gfcc mgr)] -categories mgr = [c | CId c <- Map.keys (cats (abstract mgr))] +categories mgr = [c | CId c <- Map.keys (cats (abstract (gfcc mgr)))] startCat mgr = "S" ---- |
