Parse.hs revision 61e38a4f194d3adc66646326c938eb9263a2f39b
f3cd81f98592d1dbf301f48af31677a6a0cc666aChristian MaederModule : $Header$
f3cd81f98592d1dbf301f48af31677a6a0cc666aChristian MaederCopyright : (c) C. Maeder, DFKI Bremen 2008
f3cd81f98592d1dbf301f48af31677a6a0cc666aChristian MaederLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
f3cd81f98592d1dbf301f48af31677a6a0cc666aChristian MaederMaintainer : Christian.Maeder@dfki.de
f3cd81f98592d1dbf301f48af31677a6a0cc666aChristian MaederStability : provisional
f3cd81f98592d1dbf301f48af31677a6a0cc666aChristian MaederPortability : portable
f3cd81f98592d1dbf301f48af31677a6a0cc666aChristian MaederParser for VSE logic extension of CASL
715a002611e0c503c11cc3aa80835763215e689dChristian Maederimport Data.Char (toUpper, toLower)
715a002611e0c503c11cc3aa80835763215e689dChristian MaederdeclWords :: [String]
f3cd81f98592d1dbf301f48af31677a6a0cc666aChristian MaederdeclWords = let
f3cd81f98592d1dbf301f48af31677a6a0cc666aChristian Maeder ps = ["procedure", "function"]
f3cd81f98592d1dbf301f48af31677a6a0cc666aChristian Maeder rs = ps ++ map (++ "s") ps
f3cd81f98592d1dbf301f48af31677a6a0cc666aChristian Maeder in rs ++ map (map toUpper) rs
fa45d098e1c9d468f128be9505eb7e5b2705b304Christian MaederreservedWords :: [String]
fa45d098e1c9d468f128be9505eb7e5b2705b304Christian MaederreservedWords = let
f3cd81f98592d1dbf301f48af31677a6a0cc666aChristian Maeder [ "in", "out", "begin", "end", "abort", "skip", "return", "declare"
fa45d098e1c9d468f128be9505eb7e5b2705b304Christian Maeder , "if", "then", "else", "fi", "while", "do", "od"
fa45d098e1c9d468f128be9505eb7e5b2705b304Christian Maeder , "defprocs", "defprocsend" ]
fa45d098e1c9d468f128be9505eb7e5b2705b304Christian Maeder in [ "<:", ":>"] ++ declWords ++ rs ++ map (map toUpper) rs
fa45d098e1c9d468f128be9505eb7e5b2705b304Christian Maederkeyword :: String -> CharParser st Token
fa45d098e1c9d468f128be9505eb7e5b2705b304Christian Maederkeyword s = pToken $ try $ do
fa45d098e1c9d468f128be9505eb7e5b2705b304Christian Maeder str <- scanAnyWords
fa45d098e1c9d468f128be9505eb7e5b2705b304Christian Maeder if map toLower str == s then return s else unexpected str <?> map toUpper s
fa45d098e1c9d468f128be9505eb7e5b2705b304Christian MaedervseVarDecl :: AParser st VarDecl
fa45d098e1c9d468f128be9505eb7e5b2705b304Christian MaedervseVarDecl = do
fa45d098e1c9d468f128be9505eb7e5b2705b304Christian Maeder v <- varId reservedWords
fa45d098e1c9d468f128be9505eb7e5b2705b304Christian Maeder s <- sortId reservedWords