curry gotcha
[cc1516.git] / lex.dcl
1 definition module lex
2
3 from Data.Either import :: Either
4 from yard import :: Error
5 from AST import :: Pos
6
7 :: Token :== (Pos, TokenValue)
8 :: TokenValue
9 //Value tokens
10 = IdentToken String // Identifier
11 | NumberToken Int // Integer
12 | CharToken Char // Character literal
13 | StringToken [Char]// String literal
14 //Keyword tokens
15 | VarToken // var keyword
16 | ReturnToken // return keyword
17 | IfToken // if keyword
18 | ElseToken // else keyword
19 | WhileToken // while keyword
20 | TrueToken // True keyword
21 | FalseToken // False keyword
22 | VoidToken // Void keyword
23 | IntTypeToken // Int keyword
24 | CharTypeToken // Char keyword
25 | BoolTypeToken // Bool keyword
26 | LetToken // Let keyword
27 //Two character tokens
28 | DoubleColonToken // ::
29 | NotEqualToken // !=
30 | LesserEqToken // <=
31 | GreaterEqToken // >=
32 | EqualsToken // ==
33 | AmpersandsToken // &&
34 | PipesToken // ||
35 | ArrowToken // ->
36 | EmptyListToken // []
37 //One character tokens
38 | BraceOpenToken // (
39 | BraceCloseToken // )
40 | CBraceOpenToken // {
41 | CBraceCloseToken // }
42 | SquareOpenToken // [
43 | SquareCloseToken // ]
44 | CommaToken // ,
45 | ColonToken // :
46 | SColonToken // ;
47 | DotToken // .
48 | PlusToken // +
49 | DashToken // -
50 | StarToken // *
51 | SlashToken // /
52 | PercentToken // %
53 | AssignmentToken // =
54 | LesserToken // <
55 | BiggerToken // >
56 | ExclamationToken // !
57 | BackslashToken // \
58
59 :: LexerOutput :== Either Error [Token]
60
61 lexer :: [Char] -> LexerOutput