Added empty statement type

This commit is contained in:
Rafał Grodziński
2025-08-01 23:26:16 +09:00
parent 6fc92382c0
commit 932e0dc27e
6 changed files with 44 additions and 55 deletions

View File

@@ -1,61 +1,8 @@
//@extern putchar fun: character sint32 -> sint32
// ./build/brb samples/test.brc -S -x86-asm-syntax=intel
/*
User type
name data<u8, 32>
age u32
successRatio r32
isActive bool
;
*/
/*
i u32 <- 0, rep text[i] != 0:
putchar(text[i])
i++
;
*/
// text data<u8> <- "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
;

View File

@@ -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<Statement> 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<Statement> Parser::matchStatementRawFunction() {
return make_shared<StatementRawFunction>(name, constraints, arguments, returnType, rawSource);
}
shared_ptr<Statement> Parser::matchStatementType() {
return nullptr;
}
shared_ptr<Statement> Parser::matchStatementBlock(vector<TokenKind> terminalTokenKinds) {
vector<shared_ptr<Statement>> statements;

View File

@@ -31,6 +31,7 @@ private:
shared_ptr<Statement> matchStatementVariable();
shared_ptr<Statement> matchStatementFunction();
shared_ptr<Statement> matchStatementRawFunction();
shared_ptr<Statement> matchStatementType();
shared_ptr<Statement> matchStatementBlock(vector<TokenKind> terminalTokenKinds);
shared_ptr<Statement> matchStatementAssignment();

View File

@@ -14,7 +14,8 @@ enum class StatementKind {
VARIABLE,
ASSIGNMENT,
REPEAT,
META_EXTERN_FUNCTION
META_EXTERN_FUNCTION,
TYPE
};
class Statement {

View File

@@ -0,0 +1,12 @@
#include "StatementType.h"
StatementType::StatementType(string identifier, vector<shared_ptr<StatementVariable>> statementVariable):
Statement(StatementKind::TYPE), identifier(identifier), statementVariables(statementVariable) { }
string StatementType::getIdentifier() {
return identifier;
}
vector<shared_ptr<StatementVariable>> StatementType::getStatementVariables() {
return statementVariables;
}

View File

@@ -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<shared_ptr<StatementVariable>> statementVariables;
public:
StatementType(string identifier, vector<shared_ptr<StatementVariable>> statementVariables);
string getIdentifier();
vector<shared_ptr<StatementVariable>> getStatementVariables();
};
#endif