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