dcl voor interface infrastructure, we lezen nu stdin, dat werkt, lexer implementeren...
[cc1516.git] / lex.dcl
diff --git a/lex.dcl b/lex.dcl
new file mode 100644 (file)
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