basically finish AST build

This commit is contained in:
2024-08-11 15:38:53 +00:00
parent 996995ecf7
commit 9aa23caaa9
9 changed files with 824 additions and 275 deletions

View File

@ -19,12 +19,12 @@ class MXErrorListener : public antlr4::BaseErrorListener {
}
bool IsOk() { return no_problem; }
};
std::shared_ptr<ASTNodeBase> BuildAST(Visitor *visitor, antlr4::tree::ParseTree *tree) {
std::shared_ptr<Program_ASTNode> BuildAST(Visitor *visitor, antlr4::tree::ParseTree *tree) {
return std::any_cast<std::shared_ptr<Program_ASTNode>>(visitor->visit(tree));
}
std::shared_ptr<ASTNodeBase> CheckAndDecorate(std::shared_ptr<ASTNodeBase> src) { ; }
std::shared_ptr<Program_ASTNode> CheckAndDecorate(std::shared_ptr<Program_ASTNode> src) { return nullptr; }
void SemanticCheck(std::istream &fin, std::shared_ptr<ASTNodeBase> &ast_out) {
void SemanticCheck(std::istream &fin, std::shared_ptr<Program_ASTNode> &ast_out) {
antlr4::ANTLRInputStream input(fin);
MXLexer lexer(&input);
antlr4::CommonTokenStream tokens(&lexer);
@ -36,6 +36,6 @@ void SemanticCheck(std::istream &fin, std::shared_ptr<ASTNodeBase> &ast_out) {
antlr4::tree::ParseTree *tree = parser.mxprog();
if (!error_listener.IsOk()) throw SemanticError("Fatal error: syntax error", 1);
Visitor visitor;
std::shared_ptr<ASTNodeBase> ast = BuildAST(&visitor, tree);
std::shared_ptr<Program_ASTNode> ast = BuildAST(&visitor, tree);
ast_out = CheckAndDecorate(ast);
}