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) { Parser::Parser(vector<Token> tokens): tokens(tokens) {
} }
shared_ptr<Expression> Parser::getExpression() { /*shared_ptr<Expression> Parser::getExpression() {
shared_ptr<Expression> expression = term(); shared_ptr<Expression> expression = term();
if (!expression->isValid()) { if (!expression->isValid()) {
cerr << "Unexpected token '" << expression->getToken().getLexme() << "' at " << expression->getToken().getLine() << ":" << expression->getToken().getColumn() << endl; cerr << "Unexpected token '" << expression->getToken().getLexme() << "' at " << expression->getToken().getLine() << ":" << expression->getToken().getColumn() << endl;
return nullptr; return nullptr;
} }
return expression; 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() { shared_ptr<Expression> Parser::term() {

View File

@@ -4,6 +4,7 @@
#include <vector> #include <vector>
#include "Token.h" #include "Token.h"
#include "Expression.h" #include "Expression.h"
#include "Statement.h"
using namespace std; using namespace std;
@@ -22,7 +23,8 @@ private:
public: public:
Parser(vector<Token> tokens); Parser(vector<Token> tokens);
shared_ptr<Expression> getExpression(); //shared_ptr<Expression> getExpression();
vector<shared_ptr<Statement>> getStatements();
}; };
#endif #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; std::cout << std::endl;
Parser parser(tokens); Parser parser(tokens);
shared_ptr<Expression> expression = parser.getExpression(); vector<shared_ptr<Statement>> statements = parser.getStatements();
if (!expression) { if (statements.empty()) {
exit(1); 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); //ModuleBuilder moduleBuilder(expression);
shared_ptr<llvm::Module> module = moduleBuilder.getModule(); //shared_ptr<llvm::Module> module = moduleBuilder.getModule();
module->print(llvm::outs(), nullptr); //module->print(llvm::outs(), nullptr);
CodeGenerator codeGenerator(module);; //CodeGenerator codeGenerator(module);;
codeGenerator.generateObjectFile("dummy.s"); //codeGenerator.generateObjectFile("dummy.s");
return 0; return 0;
} }