lexing and printing is working
[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 | VoidToken // void 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 //One character tokens
20 | BraceOpenToken // (
21 | BraceCloseToken // )
22 | CBraceOpenToken // {
23 | CBraceCloseToken // {
24 | SquareOpenToken // [
25 | SquareCloseToken // ]
26 | CommaToken // ,
27 | ColonToken // :
28 | SColonToken // ;
29 | DotToken // .
30 | PlusToken // +
31 | DashToken // -
32 | StarToken // *
33 | SlashToken // /
34 | PercentToken // %
35 | AssignmentToken // =
36 | LesserToken // <
37 | BiggerToken // >
38 | ExclamationToken // !
39 //Two character tokens
40 | DoubleColonToken // ::
41 | LesserEqToken // <=
42 | GreaterEqToken // >=
43 | EqualsToken // ==
44 | AmpersandsToken // &&
45 | PipesToken // ||
46 | ArrowToken // ->
47 | EndOfFileToken // EOF
48
49 :: LexerOutput :== Either String [Token]
50
51 lexer :: [Char] -> LexerOutput