1
0
forked from GitHub/gf-core

move the FCFG lexer to FCFG.Active where it should have been. It was a hack anyway

This commit is contained in:
kr.angelov
2007-09-24 08:56:37 +00:00
parent 61503477f0
commit 26b1efe8b7
3 changed files with 12 additions and 14 deletions

View File

@@ -148,7 +148,15 @@ xchart2syntaxchart (XChart actives finals) pinfo =
literals :: FCFPInfo -> Input FToken -> [(FCat,Item)] literals :: FCFPInfo -> Input FToken -> [(FCat,Item)]
literals pinfo toks = literals pinfo toks =
[let (c,node) = grammarLexer pinfo t in (c,Final [makeRange i j] node) | Edge i j t <- inputEdges toks, not (t `elem` grammarToks pinfo)] [let (c,node) = lexer t in (c,Final [makeRange i j] node) | Edge i j t <- inputEdges toks, not (t `elem` grammarToks pinfo)]
where
lexer t =
case reads t of
[(n,"")] -> (fcatInt, SInt (n::Integer))
_ -> case reads t of
[(f,"")] -> (fcatFloat, SFloat (f::Double))
_ -> (fcatString,SString t)
---------------------------------------------------------------------- ----------------------------------------------------------------------
-- Earley -- -- Earley --

View File

@@ -48,7 +48,6 @@ data FCFPInfo
-- ^ used in 'GF.Parsing.MCFG.Active' (Kilbury): -- ^ used in 'GF.Parsing.MCFG.Active' (Kilbury):
, grammarCats :: SList FCat , grammarCats :: SList FCat
, grammarToks :: SList FToken , grammarToks :: SList FToken
, grammarLexer :: FToken -> (FCat,SyntaxNode RuleId RangeRec)
} }
@@ -68,8 +67,8 @@ getLeftCornerCat lins
where where
syms = lins ! 0 syms = lins ! 0
buildFCFPInfo :: (FToken -> (FCat,SyntaxNode RuleId RangeRec)) -> FGrammar -> FCFPInfo buildFCFPInfo :: FGrammar -> FCFPInfo
buildFCFPInfo lexer grammar = buildFCFPInfo grammar =
FCFPInfo { allRules = allrules FCFPInfo { allRules = allrules
, topdownRules = topdownrules , topdownRules = topdownrules
-- , emptyRules = emptyrules -- , emptyRules = emptyrules
@@ -78,7 +77,6 @@ buildFCFPInfo lexer grammar =
, leftcornerTokens = leftcorntoks , leftcornerTokens = leftcorntoks
, grammarCats = grammarcats , grammarCats = grammarcats
, grammarToks = grammartoks , grammarToks = grammartoks
, grammarLexer = lexer
} }
where allrules = listArray (0,length grammar-1) grammar where allrules = listArray (0,length grammar-1) grammar

View File

@@ -55,17 +55,9 @@ type CFPInfo = PC.CFPInfo CCat Name Token
buildPInfo :: MGrammar -> FGrammar -> CGrammar -> PInfo buildPInfo :: MGrammar -> FGrammar -> CGrammar -> PInfo
buildPInfo mcfg fcfg cfg = PInfo { mcfPInfo = PM.buildMCFPInfo mcfg buildPInfo mcfg fcfg cfg = PInfo { mcfPInfo = PM.buildMCFPInfo mcfg
, fcfPInfo = PF.buildFCFPInfo grammarLexer fcfg , fcfPInfo = PF.buildFCFPInfo fcfg
, cfPInfo = PC.buildCFPInfo cfg , cfPInfo = PC.buildCFPInfo cfg
} }
where
grammarLexer s =
case reads s of
[(n,"")] -> (fcatInt, SInt (n::Integer))
_ -> case reads s of
[(f,"")] -> (fcatFloat, SFloat (f::Double))
_ -> (fcatString,SString s)
instance Print PInfo where instance Print PInfo where
prt (PInfo m f c) = prt m ++ "\n" ++ prt c prt (PInfo m f c) = prt m ++ "\n" ++ prt c