From 95063ac64f93cd11b4df8f95b60433ffe3e1bc58 Mon Sep 17 00:00:00 2001 From: Marvin Schlegel Date: Thu, 2 May 2024 18:14:22 +0200 Subject: [PATCH] lexer implement operators --- Test/TestLexer.hs | 4 ++- src/Parser/Lexer.x | 72 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 1 deletion(-) diff --git a/Test/TestLexer.hs b/Test/TestLexer.hs index b07b38a..4838007 100644 --- a/Test/TestLexer.hs +++ b/Test/TestLexer.hs @@ -27,6 +27,7 @@ testBoolLiteralTrue = TestCase $ assertEqual "scan 'true'" [BOOLLITERAL True] $ testBoolLiteralFalse = TestCase $ assertEqual "scan 'false'" [BOOLLITERAL False] $ alexScanTokens "false" testLBrace = TestCase $ assertEqual "scan '('" [LBRACE] $ alexScanTokens "(" +testAnd = TestCase $ assertEqual "scan '&&'" [AND] $ alexScanTokens "&&" tests = TestList [ TestLabel "TestCommentSomething" testCommentSomething, @@ -43,5 +44,6 @@ tests = TestList [ TestLabel "TestCharLiteral" testCharLiteral, TestLabel "TestBoolLiteralTrue" testBoolLiteralTrue, TestLabel "TestBoolLiteralFalse" testBoolLiteralFalse, - TestLabel "TestLBrace" testLBrace + TestLabel "TestLBrace" testLBrace, + TestLabel "TestAnd" testAnd ] \ No newline at end of file diff --git a/src/Parser/Lexer.x b/src/Parser/Lexer.x index 13b944a..d7f551d 100644 --- a/src/Parser/Lexer.x +++ b/src/Parser/Lexer.x @@ -82,6 +82,43 @@ tokens :- ";" { \_ -> SEMICOLON } "," { \_ -> COMMA} "." { \_ -> DOT } + -- operators + "=" { \_ -> ASSIGN } + "==" { \_ -> EQUAL } + "+" { \_ -> PLUS } + "+=" { \_ -> PLUSEQUAL } + ">" { \_ -> GREATER } + ">=" { \_ -> GREATEREQUAL } + "-" { \_ -> MINUS } + "-=" { \_ -> MINUSEQUAL } + "<" { \_ -> LESS } + "<=" { \_ -> LESSEQUAL } + "*" { \_ -> TIMES } + "*=" { \_ -> TIMESEQUAL } + "!" { \_ -> NOT } + "!=" { \_ -> NOTEQUAL } + "/" { \_ -> DIV } + "/=" { \_ -> DIVEQUAL } + "~" { \_ -> BITWISENOT } + "&&" { \_ -> AND } + "&" { \_ -> BITWISEAND } + "&=" { \_ -> ANDEQUAL } + "?" { \_ -> QUESTIONMARK } + "||" { \_ -> OR } + "|" { \_ -> BITWISEOR } + "|=" { \_ -> OREQUAL } + ":" { \_ -> COLON } + "++" { \_ -> INCREMENT } + "^" { \_ -> XOR } + "^=" { \_ -> XOREQUAL } + "--" { \_ -> DECREMENT } + "%" { \_ -> MODULO } + "%=" { \_ -> MODULOEQUAL } + "<<" { \_ -> SHIFTLEFT } + "<<=" { \_ -> SHIFTLEFTEQUAL } + ">>" { \_ -> SHIFTRIGHT } + ">>=" { \_ -> SHIFTRIGHTEQUAL } + { data Token @@ -147,6 +184,41 @@ data Token | SEMICOLON | COMMA | DOT + | ASSIGN + | EQUAL + | PLUS + | PLUSEQUAL + | GREATER + | GREATEREQUAL + | MINUS + | MINUSEQUAL + | LESS + | LESSEQUAL + | TIMES + | TIMESEQUAL + | NOT + | NOTEQUAL + | DIV + | DIVEQUAL + | BITWISENOT + | AND + | BITWISEAND + | ANDEQUAL + | QUESTIONMARK + | OR + | BITWISEOR + | OREQUAL + | COLON + | INCREMENT + | XOR + | XOREQUAL + | DECREMENT + | MODULO + | MODULOEQUAL + | SHIFTLEFT + | SHIFTLEFTEQUAL + | SHIFTRIGHT + | SHIFTRIGHTEQUAL deriving(Eq,Show) } \ No newline at end of file