add argparse
This commit is contained in:
parent
8324561db1
commit
5c492ddbf4
1698
include/argparse.hpp
Normal file
1698
include/argparse.hpp
Normal file
File diff suppressed because it is too large
Load Diff
39
src/main.cpp
39
src/main.cpp
@ -1,26 +1,55 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "antlr4-runtime.h"
|
|
||||||
#include "SysyLexer.h"
|
#include "SysyLexer.h"
|
||||||
#include "SysyParser.h"
|
#include "SysyParser.h"
|
||||||
|
#include "antlr4-runtime.h"
|
||||||
|
#include <argparse.hpp>
|
||||||
|
|
||||||
using namespace antlrSysY;
|
using namespace antlrSysY;
|
||||||
using namespace antlr4;
|
using namespace antlr4;
|
||||||
|
|
||||||
int main(int , const char **) {
|
int main(int argc, const char **argv) {
|
||||||
ANTLRInputStream input(u8"🍴 = 🍐 + \"😎\";(((x * π))) * µ + ∰; a + (x * (y ? 0 : 1) + z);");
|
#pragma region ArgParse
|
||||||
|
argparse::ArgumentParser arg_parser("Catfood's SysY Compiler");
|
||||||
|
arg_parser.add_argument("source").help("A single SysY source file");
|
||||||
|
arg_parser.add_argument("-S")
|
||||||
|
.implicit_value(true)
|
||||||
|
.help("Useless but required by the contest")
|
||||||
|
.required();
|
||||||
|
arg_parser.add_argument("-o").help("Output file name").required();
|
||||||
|
arg_parser.add_argument("-O1").implicit_value(true).default_value(false).help(
|
||||||
|
"Performance mode");
|
||||||
|
try {
|
||||||
|
arg_parser.parse_args(argc, argv);
|
||||||
|
} catch (const std::runtime_error &err) {
|
||||||
|
std::cerr << err.what() << std::endl;
|
||||||
|
std::cerr << arg_parser;
|
||||||
|
std::exit(1);
|
||||||
|
}
|
||||||
|
auto source_file = arg_parser.get<std::string>("source");
|
||||||
|
auto output_file = arg_parser.get<std::string>("-o");
|
||||||
|
auto flg_O1 = arg_parser["-O1"] == true;
|
||||||
|
// std::cout << source_file << " " << output_file << " " << flg_O1 << std::endl;
|
||||||
|
#pragma endregion
|
||||||
|
|
||||||
|
std::ifstream ifs_source_file(source_file);
|
||||||
|
ANTLRInputStream input(ifs_source_file);
|
||||||
SysyLexer lexer(&input);
|
SysyLexer lexer(&input);
|
||||||
CommonTokenStream tokens(&lexer);
|
CommonTokenStream tokens(&lexer);
|
||||||
|
|
||||||
tokens.fill();
|
tokens.fill();
|
||||||
|
#if 0
|
||||||
for (auto token : tokens.getTokens()) {
|
for (auto token : tokens.getTokens()) {
|
||||||
std::cout << token->toString() << std::endl;
|
std::cout << token->toString() << std::endl;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
SysyParser parser(&tokens);
|
SysyParser parser(&tokens);
|
||||||
tree::ParseTree *tree = parser.program();
|
tree::ParseTree *tree = parser.program();
|
||||||
|
#if 0
|
||||||
std::cout << tree->toStringTree(&parser) << std::endl << std::endl;
|
std::cout << tree->toStringTree(&parser) << std::endl << std::endl;
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user