From c75052e35f7b2bc01bdcba394b0b189ababdbe28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Grodzi=C5=84ski?= Date: Thu, 31 Jul 2025 22:04:30 +0900 Subject: [PATCH] Added expression unary --- samples/test.brc | 6 +++--- src/Parser/Expression/Expression.h | 1 + src/Parser/Expression/ExpressionBinary.h | 9 ++++++-- src/Parser/Expression/ExpressionUnary.cpp | 26 +++++++++++++++++++++++ src/Parser/Expression/ExpressionUnary.h | 23 ++++++++++++++++++++ 5 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 src/Parser/Expression/ExpressionUnary.cpp create mode 100644 src/Parser/Expression/ExpressionUnary.h diff --git a/samples/test.brc b/samples/test.brc index 25c5641..b2f978b 100644 --- a/samples/test.brc +++ b/samples/test.brc @@ -50,10 +50,10 @@ i u32 <- 0, rep text[i] != 0: main fun -> u32 num1 u8 <- 42 - num2 s8 <- 15 + num2 s8 <- -15 num3 u32 <- 1234123 - num4 s32 <- 345345 - num5 r32 <- 42.58 + num4 s32 <- -345345 + num5 r32 <- -42.58 ret 0 ; \ No newline at end of file diff --git a/src/Parser/Expression/Expression.h b/src/Parser/Expression/Expression.h index 66bd170..a335052 100644 --- a/src/Parser/Expression/Expression.h +++ b/src/Parser/Expression/Expression.h @@ -12,6 +12,7 @@ enum class ExpressionKind { LITERAL, ARRAY_LITERAL, GROUPING, + UNARY, BINARY, IF_ELSE, VAR, diff --git a/src/Parser/Expression/ExpressionBinary.h b/src/Parser/Expression/ExpressionBinary.h index 0c5bb4c..56b31fa 100644 --- a/src/Parser/Expression/ExpressionBinary.h +++ b/src/Parser/Expression/ExpressionBinary.h @@ -1,4 +1,7 @@ -#include "Parser/Expression/Expression.h" +#ifndef EXPRESSION_BINARY_H +#define EXPRESSION_BINARY_H + +#include "Expression.h" enum class ExpressionBinaryOperation { EQUAL, @@ -26,4 +29,6 @@ public: ExpressionBinaryOperation getOperation(); shared_ptr getLeft(); shared_ptr getRight(); -}; \ No newline at end of file +}; + +#endif \ No newline at end of file diff --git a/src/Parser/Expression/ExpressionUnary.cpp b/src/Parser/Expression/ExpressionUnary.cpp new file mode 100644 index 0000000..420cdd9 --- /dev/null +++ b/src/Parser/Expression/ExpressionUnary.cpp @@ -0,0 +1,26 @@ +#include "ExpressionUnary.h" + +#include "Lexer/Token.h" + +ExpressionUnary::ExpressionUnary(shared_ptr token, shared_ptr expression): +Expression(ExpressionKind::UNARY, nullptr), expression(expression) { + switch (token->getKind()) { + case TokenKind::PLUS: + operation = ExpressionUnaryOperation::PLUS; + break; + case TokenKind::MINUS: + operation = ExpressionUnaryOperation::MINUS; + break; + default: + operation = ExpressionUnaryOperation::INVALID; + break; + } +} + +ExpressionUnaryOperation ExpressionUnary::getOperation() { + return operation; +} + +shared_ptr ExpressionUnary::getExpression() { + return expression; +} \ No newline at end of file diff --git a/src/Parser/Expression/ExpressionUnary.h b/src/Parser/Expression/ExpressionUnary.h new file mode 100644 index 0000000..2ba56fd --- /dev/null +++ b/src/Parser/Expression/ExpressionUnary.h @@ -0,0 +1,23 @@ +#ifndef EXPRESSION_UNARY_H +#define EXPRESSION_UNARY_H + +#include "Expression.h" + +enum class ExpressionUnaryOperation { + PLUS, + MINUS, + INVALID +}; + +class ExpressionUnary: public Expression { +private: + ExpressionUnaryOperation operation; + shared_ptr expression; + +public: + ExpressionUnary(shared_ptr token, shared_ptr expression); + ExpressionUnaryOperation getOperation(); + shared_ptr getExpression(); +}; + +#endif \ No newline at end of file