1 -----------------------------------------------------------------------------
3 -- Module : Text.ParserCombinators.Parsec.Language
4 -- Copyright : (c) Daan Leijen 1999-2001
5 -- License : BSD-style (see the file libraries/base/LICENSE)
7 -- Maintainer : daan@cs.uu.nl
8 -- Stability : provisional
9 -- Portability : non-portable (uses non-portable module Text.ParserCombinators.Parsec.Token)
11 -- A helper module that defines some language definitions that can be used
12 -- to instantiate a token parser (see "Text.ParserCombinators.Parsec.Token").
14 -----------------------------------------------------------------------------
16 module Text.ParserCombinators.Parsec.Language
18 , mondrianDef, mondrian
25 import Text.ParserCombinators.Parsec
26 import Text.ParserCombinators.Parsec.Token
29 -----------------------------------------------------------
30 -- Styles: haskellStyle, javaStyle
31 -----------------------------------------------------------
32 haskellStyle= emptyDef
36 , nestedComments = True
38 , identLetter = alphaNum <|> oneOf "_'"
39 , opStart = opLetter haskellStyle
40 , opLetter = oneOf ":!#$%&*+./<=>?@\\^|-~"
43 , caseSensitive = True
50 , nestedComments = True
52 , identLetter = alphaNum <|> oneOf "_'"
55 , caseSensitive = False
58 -----------------------------------------------------------
59 -- minimal language definition
60 -----------------------------------------------------------
61 emptyDef = LanguageDef
65 , nestedComments = True
66 , identStart = letter <|> char '_'
67 , identLetter = alphaNum <|> oneOf "_'"
68 , opStart = opLetter emptyDef
69 , opLetter = oneOf ":!#$%&*+./<=>?@\\^|-~"
72 , caseSensitive = True
77 -----------------------------------------------------------
79 -----------------------------------------------------------
80 haskell :: TokenParser st
81 haskell = makeTokenParser haskellDef
83 haskellDef = haskell98Def
84 { identLetter = identLetter haskell98Def <|> char '#'
85 , reservedNames = reservedNames haskell98Def ++
86 ["foreign","import","export","primitive"
92 haskell98Def = haskellStyle
93 { reservedOpNames= ["::","..","=","\\","|","<-","->","@","~","=>"]
94 , reservedNames = ["let","in","case","of","if","then","else",
96 "class","default","deriving","do","import",
97 "infix","infixl","infixr","instance","module",
100 -- "as","qualified","hiding"
105 -----------------------------------------------------------
107 -----------------------------------------------------------
108 mondrian :: TokenParser st
109 mondrian = makeTokenParser mondrianDef
111 mondrianDef = javaStyle
112 { reservedNames = [ "case", "class", "default", "extends"
113 , "import", "in", "let", "new", "of", "package"
115 , caseSensitive = True