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