X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=lex.dcl;h=e78d495a938dfe2fe934934f3a2bc168333f4329;hb=a8130cb2a970f385a7da0e2a8f7b02c1cb1a7639;hp=d6c421cf3425d5d78c02fed30c598528e2e9845a;hpb=98144e50ff2ca8e8d89dd1a39d4f2a41c2c6dab6;p=cc1516.git diff --git a/lex.dcl b/lex.dcl index d6c421c..e78d495 100644 --- a/lex.dcl +++ b/lex.dcl @@ -1,11 +1,16 @@ definition module lex -import Data.Either +from Data.Either import :: Either +from yard import :: Error -:: Token +:: Token = { + line :: Int, + column :: Int, + token :: 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 @@ -21,12 +26,14 @@ import Data.Either | BoolTypeToken // Bool keyword //Two character tokens | DoubleColonToken // :: + | NotEqualToken // != | LesserEqToken // <= | GreaterEqToken // >= | EqualsToken // == | AmpersandsToken // && | PipesToken // || | ArrowToken // -> + | EmptyListToken // [] //One character tokens | BraceOpenToken // ( | BraceCloseToken // ) @@ -50,8 +57,6 @@ import Data.Either //Special tokens | EndOfFileToken // EOF -:: LexerOutput :== Either String [Token] - -instance toString LexerOutput +:: LexerOutput :== Either Error [Token] lexer :: [Char] -> LexerOutput