definition module lex
-import Data.Either
+from Data.Either import :: Either
+from yard import :: Error
+from AST import :: Pos
-:: Token
+:: Token :== (Pos, TokenValue)
+:: TokenValue
//Value tokens
- = IdentToken [Char] // Identifier
- | NumberToken [Char]// Integer
+ = IdentToken String // Identifier
+ | NumberToken Int // Integer
| CharToken Char // Character literal
//Keyword tokens
| VarToken // var keyword
- | VoidToken // void keyword
| ReturnToken // return keyword
| IfToken // if keyword
| ElseToken // else keyword
| WhileToken // while keyword
| TrueToken // True keyword
| FalseToken // False keyword
+ | VoidToken // Void keyword
+ | IntTypeToken // Int keyword
+ | CharTypeToken // Char keyword
+ | BoolTypeToken // Bool keyword
+ //Two character tokens
+ | DoubleColonToken // ::
+ | NotEqualToken // !=
+ | LesserEqToken // <=
+ | GreaterEqToken // >=
+ | EqualsToken // ==
+ | AmpersandsToken // &&
+ | PipesToken // ||
+ | ArrowToken // ->
+ | EmptyListToken // []
//One character tokens
| BraceOpenToken // (
| BraceCloseToken // )
| CBraceOpenToken // {
- | CBraceCloseToken // {
+ | CBraceCloseToken // }
| SquareOpenToken // [
| SquareCloseToken // ]
| CommaToken // ,
| LesserToken // <
| BiggerToken // >
| ExclamationToken // !
- //Two character tokens
- | DoubleColonToken // ::
- | LesserEqToken // <=
- | GreaterEqToken // >=
- | EqualsToken // ==
- | AmpersandsToken // &&
- | PipesToken // ||
- | ArrowToken // ->
- | EndOfFileToken // EOF
-:: LexerOutput :== Either String [Token]
+:: LexerOutput :== Either Error [Token]
lexer :: [Char] -> LexerOutput