From 932e0dc27e024253244dbc3e0756480218b35741 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Grodzi=C5=84ski?= Date: Fri, 1 Aug 2025 23:26:16 +0900 Subject: [PATCH] Added empty statement type --- samples/test.brc | 55 +------------------------- src/Parser/Parser.cpp | 9 +++++ src/Parser/Parser.h | 1 + src/Parser/Statement/Statement.h | 3 +- src/Parser/Statement/StatementType.cpp | 12 ++++++ src/Parser/Statement/StatementType.h | 19 +++++++++ 6 files changed, 44 insertions(+), 55 deletions(-) create mode 100644 src/Parser/Statement/StatementType.cpp create mode 100644 src/Parser/Statement/StatementType.h diff --git a/samples/test.brc b/samples/test.brc index baa3e8f..3aeb90d 100644 --- a/samples/test.brc +++ b/samples/test.brc @@ -1,61 +1,8 @@ -//@extern putchar fun: character sint32 -> sint32 - -// ./build/brb samples/test.brc -S -x86-asm-syntax=intel - -/* User type - name data - age u32 - successRatio r32 - isActive bool ; -*/ - -/* -i u32 <- 0, rep text[i] != 0: - putchar(text[i]) - i++ -; -*/ - -// text data <- "Hello world!" - -/*addStuff asm<"+r, r">: num1 u32, num2 u32 -> u32 - add $1, $0 -;*/ - -/*normAdd fun: num1 sint32, num2 sint32 -> sint32 - ret num1 + num2 -;*/ - -/*rawAdd raw<"=r,r,r">: num1 sint32, num2 sint32 -> sint32 - add $1, $2 - mov $0, $1 -;*/ - -/*rawAdd raw: num1 sint32, num2 sint32 -> sint32 - add $1, $2 - mov $0, $1 -;*/ - -/*printChar raw - .global REGISTER - .text - .REGISTER: - .byte "Hello", 0xa0 - .long RegisterTable - //push 0x21 - -;*/ main fun -> u32 - num1 u8 <- 42 - num2 s8 <- 3 - +15 - num3 u32 <- 1234123 - num4 s32 <- -345345 - num5 r32 <- -42.58 - - num5 + num3 + //user User ret 0 ; \ No newline at end of file diff --git a/src/Parser/Parser.cpp b/src/Parser/Parser.cpp index bdf291f..1b2a38d 100644 --- a/src/Parser/Parser.cpp +++ b/src/Parser/Parser.cpp @@ -18,6 +18,7 @@ #include "Parser/Statement/StatementFunction.h" #include "Parser/Statement/StatementRawFunction.h" +#include "Parser/Statement/StatementType.h" #include "Parser/Statement/StatementVariable.h" #include "Parser/Statement/StatementAssignment.h" #include "Parser/Statement/StatementReturn.h" @@ -80,6 +81,10 @@ shared_ptr Parser::nextStatement() { if (statement != nullptr || errors.size() > errorsCount) return statement; + statement = matchStatementType(); + if (statement != nullptr || errors.size() > errorsCount) + return statement; + markError({}, {}); return nullptr; } @@ -486,6 +491,10 @@ shared_ptr Parser::matchStatementRawFunction() { return make_shared(name, constraints, arguments, returnType, rawSource); } +shared_ptr Parser::matchStatementType() { + return nullptr; +} + shared_ptr Parser::matchStatementBlock(vector terminalTokenKinds) { vector> statements; diff --git a/src/Parser/Parser.h b/src/Parser/Parser.h index 0e27960..3116875 100644 --- a/src/Parser/Parser.h +++ b/src/Parser/Parser.h @@ -31,6 +31,7 @@ private: shared_ptr matchStatementVariable(); shared_ptr matchStatementFunction(); shared_ptr matchStatementRawFunction(); + shared_ptr matchStatementType(); shared_ptr matchStatementBlock(vector terminalTokenKinds); shared_ptr matchStatementAssignment(); diff --git a/src/Parser/Statement/Statement.h b/src/Parser/Statement/Statement.h index 963a9c5..578bed3 100644 --- a/src/Parser/Statement/Statement.h +++ b/src/Parser/Statement/Statement.h @@ -14,7 +14,8 @@ enum class StatementKind { VARIABLE, ASSIGNMENT, REPEAT, - META_EXTERN_FUNCTION + META_EXTERN_FUNCTION, + TYPE }; class Statement { diff --git a/src/Parser/Statement/StatementType.cpp b/src/Parser/Statement/StatementType.cpp new file mode 100644 index 0000000..a830e9f --- /dev/null +++ b/src/Parser/Statement/StatementType.cpp @@ -0,0 +1,12 @@ +#include "StatementType.h" + +StatementType::StatementType(string identifier, vector> statementVariable): +Statement(StatementKind::TYPE), identifier(identifier), statementVariables(statementVariable) { } + +string StatementType::getIdentifier() { + return identifier; +} + +vector> StatementType::getStatementVariables() { + return statementVariables; +} \ No newline at end of file diff --git a/src/Parser/Statement/StatementType.h b/src/Parser/Statement/StatementType.h new file mode 100644 index 0000000..02f9b40 --- /dev/null +++ b/src/Parser/Statement/StatementType.h @@ -0,0 +1,19 @@ +#ifndef STATEMENT_TYPE_H +#define STATEMENT_TYPE_H + +#include "Statement.h" + +class StatementVariable; + +class StatementType: public Statement { +private: + string identifier; + vector> statementVariables; + +public: + StatementType(string identifier, vector> statementVariables); + string getIdentifier(); + vector> getStatementVariables(); +}; + +#endif \ No newline at end of file