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,
};
static const std::unordered_map<AstType, FString> 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<AstType, FString> 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()
{

View File

@@ -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<bool>("--version"))
{
std::print("Fig Interpreter version {}\n", Fig::Core::VERSION);
return 0;
}
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());
if (!file.is_open())
{

View File

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