some small fixes
[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 //Keyword tokens
14 | VarToken // var keyword
15 | ReturnToken // return keyword
16 | IfToken // if keyword
17 | ElseToken // else keyword
18 | WhileToken // while keyword
19 | TrueToken // True keyword
20 | FalseToken // False keyword
21 | VoidToken // Void keyword
22 | IntTypeToken // Int keyword
23 | CharTypeToken // Char keyword
24 | BoolTypeToken // Bool keyword
25 //Two character tokens
26 | DoubleColonToken // ::
27 | NotEqualToken // !=
28 | LesserEqToken // <=
29 | GreaterEqToken // >=
30 | EqualsToken // ==
31 | AmpersandsToken // &&
32 | PipesToken // ||
33 | ArrowToken // ->
34 | EmptyListToken // []
35 //One character tokens
36 | BraceOpenToken // (
37 | BraceCloseToken // )
38 | CBraceOpenToken // {
39 | CBraceCloseToken // }
40 | SquareOpenToken // [
41 | SquareCloseToken // ]
42 | CommaToken // ,
43 | ColonToken // :
44 | SColonToken // ;
45 | DotToken // .
46 | PlusToken // +
47 | DashToken // -
48 | StarToken // *
49 | SlashToken // /
50 | PercentToken // %
51 | AssignmentToken // =
52 | LesserToken // <
53 | BiggerToken // >
54 | ExclamationToken // !
55
56 :: LexerOutput :== Either Error [Token]
57
58 lexer :: [Char] -> LexerOutput