command -v(--version) support. ast typeName method now returns magic_enum::enum_name

This commit is contained in:
2025-12-21 20:18:05 +08:00
parent 8323b9023a
commit acc2d33dbc
8 changed files with 51 additions and 59 deletions

View File

View File

@@ -1,3 +0,0 @@
# Intro
> Fig is a modern

View File

@@ -1,2 +0,0 @@
* [Home](/)
* [Guide](guide.md "The greatest guide in the world")

View File

@@ -1,21 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>The Fig Programming Language</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="description" content="Description">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify@4/lib/themes/vue.css">
</head>
<body>
<div id="app">加载中 Loading... 🥰</div>
<script>
window.$docsify = {
loadSidebar: true
}
</script>
<!-- Docsify v4 -->
<script src="//cdn.jsdelivr.net/npm/docsify@4"></script>
</body>
</html>

View File

@@ -1,3 +0,0 @@
# 简介
> Fig 是一个现代、简单的语言

View File

@@ -52,37 +52,37 @@ namespace Fig::Ast
ContinueSt, ContinueSt,
}; };
static const std::unordered_map<AstType, FString> astTypeToString{ // static const std::unordered_map<AstType, FString> astTypeToString{
/* Base Class */ // /* Base Class */
{AstType::_AstBase, FString(u8"Ast")}, // {AstType::_AstBase, FString(u8"Ast")},
{AstType::StatementBase, FString(u8"Statement")}, // {AstType::StatementBase, FString(u8"Statement")},
{AstType::ExpressionBase, FString(u8"Expression")}, // {AstType::ExpressionBase, FString(u8"Expression")},
/* Expression */ // /* Expression */
{AstType::ValueExpr, FString(u8"ValueExpr")}, // {AstType::ValueExpr, FString(u8"ValueExpr")},
{AstType::LambdaExpr, FString(u8"LambdaExpr")}, // {AstType::LambdaExpr, FString(u8"LambdaExpr")},
{AstType::UnaryExpr, FString(u8"UnaryExpr")}, // {AstType::UnaryExpr, FString(u8"UnaryExpr")},
{AstType::BinaryExpr, FString(u8"BinaryExpr")}, // {AstType::BinaryExpr, FString(u8"BinaryExpr")},
{AstType::TernaryExpr, FString(u8"TernaryExpr")}, // {AstType::TernaryExpr, FString(u8"TernaryExpr")},
{AstType::InitExpr, FString(u8"InitExpr")}, // {AstType::InitExpr, FString(u8"InitExpr")},
/* Statement */ // /* Statement */
{AstType::BlockStatement, FString(u8"BlockStatement")}, // {AstType::BlockStatement, FString(u8"BlockStatement")},
{AstType::VarDefSt, FString(u8"VarSt")}, // {AstType::VarDefSt, FString(u8"VarSt")},
{AstType::FunctionDefSt, FString(u8"FunctionDefSt")}, // {AstType::FunctionDefSt, FString(u8"FunctionDefSt")},
{AstType::StructSt, FString(u8"StructSt")}, // {AstType::StructSt, FString(u8"StructSt")},
{AstType::ImplementSt, FString(u8"ImplementSt")}, // {AstType::ImplementSt, FString(u8"ImplementSt")},
{AstType::IfSt, FString(u8"IfSt")}, // {AstType::IfSt, FString(u8"IfSt")},
{AstType::ElseSt, FString(u8"ElseSt")}, // {AstType::ElseSt, FString(u8"ElseSt")},
{AstType::ElseIfSt, FString(u8"ElseIfSt")}, // {AstType::ElseIfSt, FString(u8"ElseIfSt")},
{AstType::VarAssignSt, FString(u8"VarAssignSt")}, // {AstType::VarAssignSt, FString(u8"VarAssignSt")},
{AstType::WhileSt, FString(u8"WhileSt")}, // {AstType::WhileSt, FString(u8"WhileSt")},
{AstType::ReturnSt, FString(u8"ReturnSt")}, // {AstType::ReturnSt, FString(u8"ReturnSt")},
{AstType::BreakSt, FString(u8"BreakSt")}, // {AstType::BreakSt, FString(u8"BreakSt")},
{AstType::ContinueSt, FString(u8"ContinueSt")}, // {AstType::ContinueSt, FString(u8"ContinueSt")},
}; // };
struct AstAddressInfo struct AstAddressInfo
{ {
@@ -111,7 +111,9 @@ namespace Fig::Ast
virtual FString typeName() virtual FString typeName()
{ {
return astTypeToString.at(type); return FString::fromStringView(
FStringView::fromBasicStringView(magic_enum::enum_name(type))
);
} }
virtual FString toString() virtual FString toString()
{ {

View File

@@ -71,7 +71,12 @@ int main(int argc, char **argv)
{ {
argparse::ArgumentParser program("Fig Interpreter", Fig::Core::VERSION.data()); argparse::ArgumentParser program("Fig Interpreter", Fig::Core::VERSION.data());
program.add_argument("source") 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 // interpreter
try try
@@ -83,8 +88,17 @@ int main(int argc, char **argv)
std::cerr << e.what() << '\n'; std::cerr << e.what() << '\n';
return 1; return 1;
} }
if (program.get<bool>("--version"))
{
std::print("Fig Interpreter version {}\n", Fig::Core::VERSION);
return 0;
}
Fig::FString sourcePath(program.get<std::string>("source")); Fig::FString sourcePath(program.get<std::string>("source"));
if (sourcePath.empty())
{
std::cerr << "No source file provided.\n";
return 1;
}
std::ifstream file(sourcePath.toBasicString()); std::ifstream file(sourcePath.toBasicString());
if (!file.is_open()) if (!file.is_open())
{ {

View File

@@ -0,0 +1,5 @@
while (true)
{
__fstdout_println("1");
break;
}