X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=lex.dcl;h=f52404780343ecb6605a40735cafff7d71e967e6;hb=74b900cf6db033a51e177f7f85d835dae44217e5;hp=56c3765319aa20a5e2293816785c7bf84034d58c;hpb=011c22770609138b54195d330232bc2a1e88d0ae;p=cc1516.git diff --git a/lex.dcl b/lex.dcl index 56c3765..f524047 100644 --- a/lex.dcl +++ b/lex.dcl @@ -1,26 +1,44 @@ 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 + = IdentToken String // Identifier | NumberToken Int // Integer | CharToken Char // Character literal + | StringToken [Char]// String 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 + | LetToken // Let keyword + //Two character tokens + | DoubleColonToken // :: + | NotEqualToken // != + | LesserEqToken // <= + | GreaterEqToken // >= + | EqualsToken // == + | AmpersandsToken // && + | PipesToken // || + | ArrowToken // -> + | EmptyListToken // [] //One character tokens | BraceOpenToken // ( | BraceCloseToken // ) | CBraceOpenToken // { - | CBraceCloseToken // { + | CBraceCloseToken // } | SquareOpenToken // [ | SquareCloseToken // ] | CommaToken // , @@ -36,15 +54,8 @@ import Data.Either | LesserToken // < | BiggerToken // > | ExclamationToken // ! - //Two character tokens - | DoubleColonToken // :: - | LesserEqToken // <= - | GreaterEqToken // >= - | EqualsToken // == - | AmpersandsToken // && - | PipesToken // || - | ArrowToken // -> + | BackslashToken // \ -:: LexerOutput :== Either String [Token] +:: LexerOutput :== Either Error [Token] lexer :: [Char] -> LexerOutput