X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=lex.dcl;fp=lex.dcl;h=3abe22d521c452a216afa89fe934185f4f854605;hb=9b74ace948b5035934d377a712eddda653bc640e;hp=0000000000000000000000000000000000000000;hpb=d5190ca02578d0c678bf3f724feeaeb37ac766f8;p=cc1516.git diff --git a/lex.dcl b/lex.dcl new file mode 100644 index 0000000..3abe22d --- /dev/null +++ b/lex.dcl @@ -0,0 +1,49 @@ +definition module lex + +import Data.Either + +:: Token + //Value tokens + = 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 + //One character tokens + | BraceOpenToken // ( + | BraceCloseToken // ) + | CBraceOpenToken // { + | CBraceCloseToken // { + | SquareOpenToken // [ + | SquareCloseToken // ] + | CommaToken // , + | ColonToken // : + | SColonToken // ; + | DotToken // . + | PlusToken // + + | DashToken // - + | StarToken // * + | SlashToken // / + | PercentToken // % + | AssignmentToken // = + | LesserToken // < + | BiggerToken // > + | ExclamationToken // ! + //Two character tokens + | DoubleColonToken // :: + | LesserEqToken // <= + | GreaterEqToken // >= + | EqualsToken // == + | AmpersandsToken // && + | PipesToken // || + +:: LexerOutput :== Either String [Token] + +lexer :: [Char] -> LexerOutput