testfiles
[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 //Two character tokens
27 | DoubleColonToken // ::
28 | NotEqualToken // !=
29 | LesserEqToken // <=
30 | GreaterEqToken // >=
31 | EqualsToken // ==
32 | AmpersandsToken // &&
33 | PipesToken // ||
34 | ArrowToken // ->
35 | EmptyListToken // []
36 //One character tokens
37 | BraceOpenToken // (
38 | BraceCloseToken // )
39 | CBraceOpenToken // {
40 | CBraceCloseToken // }
41 | SquareOpenToken // [
42 | SquareCloseToken // ]
43 | CommaToken // ,
44 | ColonToken // :
45 | SColonToken // ;
46 | DotToken // .
47 | PlusToken // +
48 | DashToken // -
49 | StarToken // *
50 | SlashToken // /
51 | PercentToken // %
52 | AssignmentToken // =
53 | LesserToken // <
54 | BiggerToken // >
55 | ExclamationToken // !
56
57 :: LexerOutput :== Either Error [Token]
58
59 lexer :: [Char] -> LexerOutput