// 调用 ANTLR 生成的 Lexer/Parser,返回 parse tree。 #include "frontend/AntlrDriver.h" #include #include #include #include "SysYLexer.h" #include "SysYParser.h" #include "antlr4-runtime.h" AntlrResult ParseFileWithAntlr(const std::string& path) { std::ifstream fin(path); if (!fin.is_open()) { throw std::runtime_error("无法打开输入文件: " + path); } std::ostringstream ss; ss << fin.rdbuf(); auto input = std::make_unique(ss.str()); auto lexer = std::make_unique(input.get()); auto tokens = std::make_unique(lexer.get()); auto parser = std::make_unique(tokens.get()); parser->removeErrorListeners(); auto tree = parser->compUnit(); AntlrResult result; result.input = std::move(input); result.lexer = std::move(lexer); result.tokens = std::move(tokens); result.parser = std::move(parser); result.tree = tree; return result; }