3 from Data.Either import :: Either
4 from yard import :: Error
7 :: Token :== (Pos, TokenValue)
10 = IdentToken String // Identifier
11 | NumberToken Int // Integer
12 | CharToken Char // Character literal
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 // ::
29 | GreaterEqToken // >=
31 | AmpersandsToken // &&
34 | EmptyListToken // []
35 //One character tokens
37 | BraceCloseToken // )
38 | CBraceOpenToken // {
39 | CBraceCloseToken // }
40 | SquareOpenToken // [
41 | SquareCloseToken // ]
51 | AssignmentToken // =
54 | ExclamationToken // !
56 :: LexerOutput :== Either Error [Token]
58 lexer :: [Char] -> LexerOutput