support for multi-character string literals

This commit is contained in:
aarne
2005-04-04 14:50:27 +00:00
parent af50c703a6
commit 2f78c3e209
2 changed files with 20 additions and 11 deletions

View File

@@ -5,9 +5,9 @@
-- Stability : (stable) -- Stability : (stable)
-- Portability : (portable) -- Portability : (portable)
-- --
-- > CVS $Date: 2005/02/24 11:46:38 $ -- > CVS $Date: 2005/04/04 15:50:27 $
-- > CVS $Author: peb $ -- > CVS $Author: aarne $
-- > CVS $Revision: 1.17 $ -- > CVS $Revision: 1.18 $
-- --
-- From internal source syntax to BNFC-generated (used for printing). -- From internal source syntax to BNFC-generated (used for printing).
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
@@ -145,6 +145,8 @@ trt trm = case trm of
Q t l -> P.EQCons (tri t) (tri l) Q t l -> P.EQCons (tri t) (tri l)
QC t l -> P.EQConstr (tri t) (tri l) QC t l -> P.EQConstr (tri t) (tri l)
TSh (TComp ty) cc -> P.ETTable (trt ty) (map trCases cc) TSh (TComp ty) cc -> P.ETTable (trt ty) (map trCases cc)
TSh (TTyped ty) cc -> P.ETTable (trt ty) (map trCases cc)
TSh (TWild ty) cc -> P.ETTable (trt ty) (map trCases cc)
T (TTyped ty) cc -> P.ETTable (trt ty) (map trCase cc) T (TTyped ty) cc -> P.ETTable (trt ty) (map trCase cc)
T (TComp ty) cc -> P.ETTable (trt ty) (map trCase cc) T (TComp ty) cc -> P.ETTable (trt ty) (map trCase cc)
T (TWild ty) cc -> P.ETTable (trt ty) (map trCase cc) T (TWild ty) cc -> P.ETTable (trt ty) (map trCase cc)

View File

@@ -5,9 +5,9 @@
-- Stability : (stable) -- Stability : (stable)
-- Portability : (portable) -- Portability : (portable)
-- --
-- > CVS $Date: 2005/02/24 11:46:39 $ -- > CVS $Date: 2005/04/04 15:50:27 $
-- > CVS $Author: peb $ -- > CVS $Author: aarne $
-- > CVS $Revision: 1.10 $ -- > CVS $Revision: 1.11 $
-- --
-- lexers = tokenizers, to prepare input for GF grammars. AR 4\/1\/2002. -- lexers = tokenizers, to prepare input for GF grammars. AR 4\/1\/2002.
-- an entry for each is included in 'Custom.customTokenizer' -- an entry for each is included in 'Custom.customTokenizer'
@@ -38,15 +38,23 @@ tokWords :: String -> [CFTok]
tokWords = map tS . words tokWords = map tS . words
tokLits :: String -> [CFTok] tokLits :: String -> [CFTok]
tokLits = map mkCFTok . words tokLits = map mkCFTok . mergeStr . words where
mergeStr ss = case ss of
w@(c:_):rest | elem c "\'\"" -> getStr [w] rest
w :rest -> w : mergeStr rest
[] -> []
getStr v ss = case ss of
w@(_:_):rest | elem (last w) "\'\"" -> (unwords (reverse (w:v))) : mergeStr rest
w :rest -> getStr (w:v) rest
[] -> reverse v
tokVars :: String -> [CFTok] tokVars :: String -> [CFTok]
tokVars = map mkCFTokVar . words tokVars = map mkCFTokVar . words
mkCFTok :: String -> CFTok mkCFTok :: String -> CFTok
mkCFTok s = case s of mkCFTok s = case s of
'"' :cs@(_:_) -> tL $ init cs '"' :cs@(_:_) | last cs == '"' -> tL $ init cs
'\'':cs@(_:_) -> tL $ init cs --- 's Gravenhage '\'':cs@(_:_) | last cs == '\'' -> tL $ init cs --- 's Gravenhage
_:_ | all isDigit s -> tI s _:_ | all isDigit s -> tI s
_ -> tS s _ -> tS s
@@ -152,7 +160,7 @@ unknown2string isKnown = map mkOne where
mkOne t@(TS s) mkOne t@(TS s)
| isKnown s = t | isKnown s = t
| all isDigit s = tI s | all isDigit s = tI s
| otherwise = tV s | otherwise = tL s
mkOne t@(TC s) = if isKnown s then t else mkTL s mkOne t@(TC s) = if isKnown s then t else mkTL s
mkOne t = t mkOne t = t
@@ -163,7 +171,6 @@ unknown2var isKnown = map mkOne where
| isKnown s = t | isKnown s = t
| all isDigit s = tI s | all isDigit s = tI s
| otherwise = tV s | otherwise = tV s
mkOne t@(TS s) = if isKnown s then t else tV s
mkOne t@(TC s) = if isKnown s then t else tV s mkOne t@(TC s) = if isKnown s then t else tV s
mkOne t = t mkOne t = t