From 4c99687f217ce258f821d55e68f5403233f6dea7 Mon Sep 17 00:00:00 2001 From: aarne Date: Fri, 7 Nov 2003 14:54:44 +0000 Subject: Fixed treatment of predefined types (Int, String). Fixed treatment of predefined types (Int, String). Added treatment of new reserved words to reading old grammars. --- src/GF/Compile/GetGrammar.hs | 13 ++++++++++++- src/GF/Compile/Rename.hs | 3 +++ 2 files changed, 15 insertions(+), 1 deletion(-) (limited to 'src/GF/Compile') diff --git a/src/GF/Compile/GetGrammar.hs b/src/GF/Compile/GetGrammar.hs index fb3fbf5ad..a9a40ee06 100644 --- a/src/GF/Compile/GetGrammar.hs +++ b/src/GF/Compile/GetGrammar.hs @@ -14,6 +14,7 @@ import SourceToGrammar import Option --- import Custom import ParGF +import qualified LexGF as L import ReadFiles ---- @@ -57,7 +58,7 @@ parseOldGrammar :: FilePath -> IOE ([FilePath],[A.TopDef]) parseOldGrammar file = do putStrE $ "reading old file" +++ file s <- ioeIO $ readFileIf file - A.OldGr incl topdefs <- ioeErr $ err2err $ pOldGrammar $ myLexer $ fixNewlines s + A.OldGr incl topdefs <- ioeErr $ err2err $ pOldGrammar $ oldLexer $ fixNewlines s includes <- ioeErr $ transInclude incl return (includes, topdefs) @@ -69,3 +70,13 @@ err2err (E.Bad s) = Bad s ioeEErr = ioeErr . err2err +-- To resolve the new reserved words: change them by turning the final letter to Z. +--- There is a risk of clash. + +oldLexer :: String -> [L.Token] +oldLexer = map change . L.tokens where + change t = case t of + (L.PT p (L.TS s)) | elem s new -> (L.PT p (L.TV (init s ++ "Z"))) + _ -> t + new = words $ "abstract concrete interface incomplete " ++ + "instance out open resource reuse transfer with" diff --git a/src/GF/Compile/Rename.hs b/src/GF/Compile/Rename.hs index 120286d4d..49e08ab6e 100644 --- a/src/GF/Compile/Rename.hs +++ b/src/GF/Compile/Rename.hs @@ -1,6 +1,7 @@ module Rename where import Grammar +import Values import Modules import Ident import Macros @@ -78,6 +79,8 @@ renameIdentTerm env@(act,imps) t = Vr c -> do f <- lookupTreeMany prt opens c return $ f c + Vr (IC "Int") -> return $ Q cPredefAbs cInt -- Int and String are predefined cats + Vr (IC "String") -> return $ Q cPredefAbs cString Cn c -> do f <- lookupTreeMany prt opens c return $ f c -- cgit v1.2.3