hws-1.1.0.1: src/StdTokenDef.hs
-----------------------------------------------------------
-- Daan Leijen (c) 1999, daan@cs.uu.nl
--
-- $version: 23 Feb 2000, release version 0.2$
-----------------------------------------------------------
module StdTokenDef (TokenDef(..)
,haskellStyle, javaStyle
,emptyStyle
,haskell, haskellExt
,mondrian
) where
import Parser
-----------------------------------------------------------
-- TokenDef
-----------------------------------------------------------
data TokenDef = TokenDef
{ commentStart :: String
, commentEnd :: String
, commentLine :: String
, nestedComments :: Bool
, identStart :: Parser Char
, identLetter :: Parser Char
, opStart :: Parser Char
, opLetter :: Parser Char
, reservedNames :: [String]
, reservedOpNames:: [String]
, caseSensitive :: Bool
}
-----------------------------------------------------------
-- Styles: haskellStyle, javaStyle
-----------------------------------------------------------
haskellStyle= emptyStyle
{ commentStart = "{-"
, commentEnd = "-}"
, commentLine = "--"
, nestedComments = True
, identStart = letter
, identLetter = alphaNum <|> oneOf "_'"
, opStart = opLetter haskell
, opLetter = oneOf ":!#$%&*+./<=>?@\\^|-~"
, reservedOpNames= []
, reservedNames = []
, caseSensitive = True
}
javaStyle = emptyStyle
{ commentStart = "/*"
, commentEnd = "*/"
, commentLine = "//"
, nestedComments = True
, identStart = letter
, identLetter = alphaNum <|> oneOf "_'"
-- fixed set of operators: use 'symbol'
, reservedNames = []
, reservedOpNames= []
, caseSensitive = False
}
-----------------------------------------------------------
-- Haskell
-----------------------------------------------------------
haskellExt = haskell
{ identLetter = identLetter haskell <|> char '#'
, reservedNames = reservedNames haskell ++
["foreign","import","export","primitive"
,"_ccall_","_casm_"
,"forall"
]
}
haskell = haskellStyle
{ reservedOpNames= ["::","..","=","\\","|","<-","->","@","~","=>"]
, reservedNames = ["let","in","case","of","if","then","else",
"data","type",
"class","default","deriving","do","import",
"infix","infixl","infixr","instance","module",
"newtype","where",
"primitive"
-- "as","qualified","hiding"
]
}
-----------------------------------------------------------
-- Mondrian
-----------------------------------------------------------
mondrian = javaStyle
{ reservedNames = [ "case", "class", "default", "extends"
, "import", "in", "let", "new", "of", "package"
]
, caseSensitive = True
}
-----------------------------------------------------------
-- minimal token definition
-----------------------------------------------------------
emptyStyle
= TokenDef
{ commentStart = ""
, commentEnd = ""
, commentLine = ""
, nestedComments = True
, identStart = unexpected "identifier"
, identLetter = unexpected "identifier"
, opStart = unexpected "operator"
, opLetter = unexpected "operator"
, reservedOpNames= []
, reservedNames = []
, caseSensitive = True
}