From acc2d33dbcdf8c7c2cdb5bbbf861239ab76f556c Mon Sep 17 00:00:00 2001 From: PuqiAR Date: Sun, 21 Dec 2025 20:18:05 +0800 Subject: [PATCH] command -v(--version) support. ast typeName method now returns magic_enum::enum_name --- docs/.nojekyll | 0 docs/README.md | 3 --- docs/_sidebar.md | 2 -- docs/index.html | 21 --------------- docs/zh-cn/README.md | 3 --- include/Ast/astBase.hpp | 58 +++++++++++++++++++++-------------------- src/main.cpp | 18 +++++++++++-- test.fig | 5 ++++ 8 files changed, 51 insertions(+), 59 deletions(-) delete mode 100644 docs/.nojekyll delete mode 100644 docs/README.md delete mode 100644 docs/_sidebar.md delete mode 100644 docs/index.html delete mode 100644 docs/zh-cn/README.md diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e69de29..0000000 diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 54f0811..0000000 --- a/docs/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Intro - -> Fig is a modern diff --git a/docs/_sidebar.md b/docs/_sidebar.md deleted file mode 100644 index b536964..0000000 --- a/docs/_sidebar.md +++ /dev/null @@ -1,2 +0,0 @@ -* [Home](/) -* [Guide](guide.md "The greatest guide in the world") \ No newline at end of file diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 57a96bb..0000000 --- a/docs/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - The Fig Programming Language - - - - - - -
加载中 Loading... 🥰
- - - - - diff --git a/docs/zh-cn/README.md b/docs/zh-cn/README.md deleted file mode 100644 index b3cc80d..0000000 --- a/docs/zh-cn/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# 简介 - -> Fig 是一个现代、简单的语言 diff --git a/include/Ast/astBase.hpp b/include/Ast/astBase.hpp index 871f185..42e6448 100644 --- a/include/Ast/astBase.hpp +++ b/include/Ast/astBase.hpp @@ -52,37 +52,37 @@ namespace Fig::Ast ContinueSt, }; - static const std::unordered_map astTypeToString{ - /* Base Class */ - {AstType::_AstBase, FString(u8"Ast")}, - {AstType::StatementBase, FString(u8"Statement")}, - {AstType::ExpressionBase, FString(u8"Expression")}, - /* Expression */ - {AstType::ValueExpr, FString(u8"ValueExpr")}, - {AstType::LambdaExpr, FString(u8"LambdaExpr")}, - {AstType::UnaryExpr, FString(u8"UnaryExpr")}, - {AstType::BinaryExpr, FString(u8"BinaryExpr")}, - {AstType::TernaryExpr, FString(u8"TernaryExpr")}, + // static const std::unordered_map astTypeToString{ + // /* Base Class */ + // {AstType::_AstBase, FString(u8"Ast")}, + // {AstType::StatementBase, FString(u8"Statement")}, + // {AstType::ExpressionBase, FString(u8"Expression")}, + // /* Expression */ + // {AstType::ValueExpr, FString(u8"ValueExpr")}, + // {AstType::LambdaExpr, FString(u8"LambdaExpr")}, + // {AstType::UnaryExpr, FString(u8"UnaryExpr")}, + // {AstType::BinaryExpr, FString(u8"BinaryExpr")}, + // {AstType::TernaryExpr, FString(u8"TernaryExpr")}, - {AstType::InitExpr, FString(u8"InitExpr")}, + // {AstType::InitExpr, FString(u8"InitExpr")}, - /* Statement */ - {AstType::BlockStatement, FString(u8"BlockStatement")}, + // /* Statement */ + // {AstType::BlockStatement, FString(u8"BlockStatement")}, - {AstType::VarDefSt, FString(u8"VarSt")}, - {AstType::FunctionDefSt, FString(u8"FunctionDefSt")}, - {AstType::StructSt, FString(u8"StructSt")}, - {AstType::ImplementSt, FString(u8"ImplementSt")}, + // {AstType::VarDefSt, FString(u8"VarSt")}, + // {AstType::FunctionDefSt, FString(u8"FunctionDefSt")}, + // {AstType::StructSt, FString(u8"StructSt")}, + // {AstType::ImplementSt, FString(u8"ImplementSt")}, - {AstType::IfSt, FString(u8"IfSt")}, - {AstType::ElseSt, FString(u8"ElseSt")}, - {AstType::ElseIfSt, FString(u8"ElseIfSt")}, - {AstType::VarAssignSt, FString(u8"VarAssignSt")}, - {AstType::WhileSt, FString(u8"WhileSt")}, - {AstType::ReturnSt, FString(u8"ReturnSt")}, - {AstType::BreakSt, FString(u8"BreakSt")}, - {AstType::ContinueSt, FString(u8"ContinueSt")}, - }; + // {AstType::IfSt, FString(u8"IfSt")}, + // {AstType::ElseSt, FString(u8"ElseSt")}, + // {AstType::ElseIfSt, FString(u8"ElseIfSt")}, + // {AstType::VarAssignSt, FString(u8"VarAssignSt")}, + // {AstType::WhileSt, FString(u8"WhileSt")}, + // {AstType::ReturnSt, FString(u8"ReturnSt")}, + // {AstType::BreakSt, FString(u8"BreakSt")}, + // {AstType::ContinueSt, FString(u8"ContinueSt")}, + // }; struct AstAddressInfo { @@ -111,7 +111,9 @@ namespace Fig::Ast virtual FString typeName() { - return astTypeToString.at(type); + return FString::fromStringView( + FStringView::fromBasicStringView(magic_enum::enum_name(type)) + ); } virtual FString toString() { diff --git a/src/main.cpp b/src/main.cpp index a652563..529ccb4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -71,7 +71,12 @@ int main(int argc, char **argv) { argparse::ArgumentParser program("Fig Interpreter", Fig::Core::VERSION.data()); program.add_argument("source") - .help("source file to be interpreted"); + .help("source file to be interpreted") + .default_value(std::string("")); + program.add_argument("-v", "--version") + .help("get the version of Fig Interpreter") + .default_value(false) + .implicit_value(true); // interpreter try @@ -83,8 +88,17 @@ int main(int argc, char **argv) std::cerr << e.what() << '\n'; return 1; } - + if (program.get("--version")) + { + std::print("Fig Interpreter version {}\n", Fig::Core::VERSION); + return 0; + } Fig::FString sourcePath(program.get("source")); + if (sourcePath.empty()) + { + std::cerr << "No source file provided.\n"; + return 1; + } std::ifstream file(sourcePath.toBasicString()); if (!file.is_open()) { diff --git a/test.fig b/test.fig index e69de29..509a2ef 100644 --- a/test.fig +++ b/test.fig @@ -0,0 +1,5 @@ +while (true) +{ + __fstdout_println("1"); + break; +} \ No newline at end of file