Added empty statement

This commit is contained in:
Rafał Grodziński
2025-06-01 10:39:15 +09:00
parent 05e3def411
commit 28e892ca12
5 changed files with 59 additions and 10 deletions

View File

@@ -3,13 +3,19 @@
Parser::Parser(vector<Token> tokens): tokens(tokens) {
}
shared_ptr<Expression> Parser::getExpression() {
/*shared_ptr<Expression> Parser::getExpression() {
shared_ptr<Expression> expression = term();
if (!expression->isValid()) {
cerr << "Unexpected token '" << expression->getToken().getLexme() << "' at " << expression->getToken().getLine() << ":" << expression->getToken().getColumn() << endl;
return nullptr;
}
return expression;
}*/
vector<shared_ptr<Statement>> Parser::getStatements() {
vector<shared_ptr<Statement>> statements;
statements.push_back(make_shared<Statement>(Statement::Kind::INVALID));
return statements;
}
shared_ptr<Expression> Parser::term() {

View File

@@ -4,6 +4,7 @@
#include <vector>
#include "Token.h"
#include "Expression.h"
#include "Statement.h"
using namespace std;
@@ -22,7 +23,8 @@ private:
public:
Parser(vector<Token> tokens);
shared_ptr<Expression> getExpression();
//shared_ptr<Expression> getExpression();
vector<shared_ptr<Statement>> getStatements();
};
#endif

11
src/Statement.cpp Normal file
View File

@@ -0,0 +1,11 @@
#include "Statement.h"
Statement::Statement(Kind kind): kind(kind) {
}
string Statement::toString() {
switch (kind) {
case INVALID:
return "INVALID";
}
}

22
src/Statement.h Normal file
View File

@@ -0,0 +1,22 @@
#ifndef STATEMENT_H
#define STATEMENT_H
#include <iostream>
using namespace std;
class Statement {
public:
enum Kind {
INVALID
};
private:
Kind kind;
public:
Statement(Kind kind);
string toString();
};
#endif

View File

@@ -44,18 +44,26 @@ int main(int argc, char **argv) {
std::cout << std::endl;
Parser parser(tokens);
shared_ptr<Expression> expression = parser.getExpression();
if (!expression) {
vector<shared_ptr<Statement>> statements = parser.getStatements();
if (statements.empty()) {
exit(1);
}
cout << expression->toString() << endl;
for (shared_ptr<Statement> &statement : statements) {
cout << statement->toString();
cout << endl;
}
//shared_ptr<Expression> expression = parser.getExpression();
//if (!expression) {
// exit(1);
//}
//cout << expression->toString() << endl;
ModuleBuilder moduleBuilder(expression);
shared_ptr<llvm::Module> module = moduleBuilder.getModule();
module->print(llvm::outs(), nullptr);
//ModuleBuilder moduleBuilder(expression);
//shared_ptr<llvm::Module> module = moduleBuilder.getModule();
//module->print(llvm::outs(), nullptr);
CodeGenerator codeGenerator(module);;
codeGenerator.generateObjectFile("dummy.s");
//CodeGenerator codeGenerator(module);;
//codeGenerator.generateObjectFile("dummy.s");
return 0;
}