diff --git a/src/GF/GFCC/API.hs b/src/GF/GFCC/API.hs index 27ee47aa8..dd45770e2 100644 --- a/src/GF/GFCC/API.hs +++ b/src/GF/GFCC/API.hs @@ -24,8 +24,8 @@ import GF.GFCC.ParGFCC import GF.GFCC.ErrM -----import GF.Parsing.FCFG -----import GF.Conversion.SimpleToFCFG (convertGrammar,FCat(..)) +import GF.Parsing.FCFG +import GF.Conversion.SimpleToFCFG (convertGrammar,FCat(..)) --import GF.Data.Operations --import GF.Infra.UseIO @@ -42,8 +42,7 @@ import System.Directory (doesFileExist) -- Interface --------------------------------------------------- -----data MultiGrammar = MultiGrammar {gfcc :: GFCC, parsers :: [(Language,FCFPInfo)]} -data MultiGrammar = MultiGrammar {gfcc :: GFCC, parsers :: [(Language,())]} +data MultiGrammar = MultiGrammar {gfcc :: GFCC, parsers :: [(Language,FCFPInfo)]} type Language = String type Category = String type Tree = Exp @@ -76,22 +75,20 @@ startCat :: MultiGrammar -> Category file2grammar f = do gfcc <- file2gfcc f ----- let fcfgs = convertGrammar gfcc ----- return (MultiGrammar gfcc [(lang, buildFCFPInfo fcfg) | (CId lang,fcfg) <- fcfgs]) - return (MultiGrammar gfcc []) + let fcfgs = convertGrammar gfcc + return (MultiGrammar gfcc [(lang, buildFCFPInfo fcfg) | (CId lang,fcfg) <- fcfgs]) file2gfcc f = readFileIf f >>= err (error) (return . mkGFCC) . pGrammar . myLexer linearize mgr lang = GF.GFCC.Linearize.linearize (gfcc mgr) (CId lang) -parse mgr lang cat s = error "no parser" -----parse mgr lang cat s = ----- case lookup lang (parsers mgr) of ----- Nothing -> error "no parser" ----- Just pinfo -> case parseFCF "bottomup" pinfo (CId cat) (words s) of ----- Ok x -> x ----- Bad s -> error s +parse mgr lang cat s = + case lookup lang (parsers mgr) of + Nothing -> error "no parser" + Just pinfo -> case parseFCF "bottomup" pinfo (CId cat) (words s) of + Ok x -> x + Bad s -> error s linearizeAll mgr = map snd . linearizeAllLang mgr linearizeAllLang mgr t = diff --git a/src/GF/GFCC/Linearize.hs b/src/GF/GFCC/Linearize.hs index 33331168b..572b8fe08 100644 --- a/src/GF/GFCC/Linearize.hs +++ b/src/GF/GFCC/Linearize.hs @@ -20,6 +20,7 @@ realize trm = case trm of KP s _ -> unwords s ---- prefix choice TODO W s t -> s ++ realize t FV ts -> realize (ts !! 0) ---- other variants TODO + RP _ r -> realize r ---- DEPREC TM -> "?" _ -> "ERROR " ++ show trm ---- debug @@ -40,6 +41,7 @@ compute :: GFCC -> CId -> [Term] -> Term -> Term compute mcfg lang args = comp where comp trm = case trm of P r p -> proj (comp r) (comp p) + RP i t -> RP (comp i) (comp t) ---- DEPREC W s t -> W s (comp t) R ts -> R $ lmap comp ts V i -> idx args i -- already computed @@ -67,11 +69,13 @@ compute mcfg lang args = comp where getIndex t = case t of C i -> i + RP p _ -> getIndex p ---- DEPREC TM -> 0 -- default value for parameter _ -> error ("ERROR in grammar compiler: index from " ++ show t) 0 getField t i = case t of R rs -> idx rs i + RP _ r -> getField r i ---- DEPREC TM -> TM _ -> error ("ERROR in grammar compiler: field from " ++ show t) t diff --git a/src/Makefile b/src/Makefile index 6cbee366d..690b66cee 100644 --- a/src/Makefile +++ b/src/Makefile @@ -199,11 +199,6 @@ gfc: mv gfc ../bin/ gfcc: - $(GHMAKE) $(GHCOPTFLAGS) -o gfcc GF/Canon/GFCC/Shell.hs - strip gfcc - mv gfcc ../bin/ - -newgfcc: $(GHMAKE) $(GHCOPTFLAGS) -o gfcc GF/Devel/Shell.hs strip gfcc mv gfcc ../bin/