// 包装 ANTLR4，提供简易的解析入口。
#pragma once

#include <memory>
#include <string>

#include "SysYLexer.h"
#include "SysYParser.h"
#include "antlr4-runtime.h"

struct AntlrResult {
  std::unique_ptr<antlr4::ANTLRInputStream> input;
  std::unique_ptr<SysYLexer> lexer;
  std::unique_ptr<antlr4::CommonTokenStream> tokens;
  std::unique_ptr<SysYParser> parser;
  antlr4::tree::ParseTree* tree = nullptr;  // owned by parser
};

// 解析指定文件，发生错误时抛出 std::runtime_error。
AntlrResult ParseFileWithAntlr(const std::string& path);
