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