--- a/tools/PascalPreprocessor.hs Tue Nov 22 19:34:15 2011 +0300
+++ b/tools/PascalPreprocessor.hs Tue Nov 22 22:48:02 2011 +0300
@@ -5,6 +5,14 @@
import System.IO
import qualified Data.Map as Map
+
+-- comments are removed
+comment = choice [
+ char '{' >> notFollowedBy (char '$') >> manyTill anyChar (try $ char '}') >> return ""
+ , (try $ string "(*") >> manyTill anyChar (try $ string "*)") >> return ""
+ , (try $ string "//") >> manyTill anyChar (try newline) >> return "\n"
+ ]
+
preprocess :: String -> IO String
preprocess fn = do
r <- runParserT (preprocessFile fn) Map.empty "" ""
@@ -20,14 +28,20 @@
f <- liftIO (readFile fn)
setInput f
preprocessor
+
preprocessor, codeBlock, switch :: ParsecT String (Map.Map String String) IO String
+
preprocessor = chainl codeBlock (return (++)) ""
+
codeBlock = choice [
switch
- --, comment
+ , comment
, char '\'' >> many (noneOf "'") >>= \s -> char '\'' >> return ('\'' : s ++ "'")
- , many1 $ noneOf "{'"
+ , many1 $ noneOf "{'/("
+ , char '/' >> notFollowedBy (char '/') >> return "/"
+ , char '(' >> notFollowedBy (char '*') >> return "("
]
+
switch = do
try $ string "{$"
s <- choice [
@@ -35,6 +49,7 @@
, unknown
]
return s
+
include = do
try $ string "INCLUDE"
spaces