From 39e0240c2c93dfd6e3587bc39a967d2609e92224 Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Wed, 8 Nov 2023 19:07:29 +0800 Subject: [PATCH] upd: add docs --- docs/Design.md | 18 ++++++++++++++++++ docs/MyFAQ.md | 1 + include/Evalvisitor.h | 4 +++- include/{namescope.h => names.h} | 0 readme.md | 2 ++ src/Evalvisitor.cpp | 8 ++++++-- src/names.cpp | 1 + 7 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 docs/Design.md create mode 100644 docs/MyFAQ.md rename include/{namescope.h => names.h} (100%) create mode 100644 src/names.cpp diff --git a/docs/Design.md b/docs/Design.md new file mode 100644 index 0000000..343a693 --- /dev/null +++ b/docs/Design.md @@ -0,0 +1,18 @@ +# python裂解器设计思路——ZYM +## 模块划分 +- `libs`、`generated`、`resources`目录:`libs`目录存放第三方库,其中int2048是我的上个大作业,用以提供大整数运算支持;json是提供json解析支持;clipp是提供命令行参数解析支持。ANTLR框架存放于`generated`、`resources`目录中。 +- `test`目录:存放测试相关,有一个进程级测试调度核心及相关配置文件、数据点,通过ctest_config接入CTest框架使得CTest可以调用进程级测试调度核心 +- `include`目录:裂解器直接相关的头文件 +- `src`目录:裂解器直接相关的实现文件。`main`负责解析命令行参数,解析代码,并访问根节点,同时处理异常;`utils`负责执行类型转换、数据解析等底层工作,保证`Evalvisitor`的简洁性;`names`负责维护变量和函数的注册和调用。 + +## 主要重难点 +### 控制流 +控制流:在数值(包括None)返回值的基础上,新增一个控制类型的范围值,不添加任何不必要的封装直接存入`std::any`,用控制类型这个类型本身标明身份。 + +### 函数调用 + +### 变量的生效范围与作用域 + +## 关键细节 +### 元组 +### 左值和右值 \ No newline at end of file diff --git a/docs/MyFAQ.md b/docs/MyFAQ.md new file mode 100644 index 0000000..bf00565 --- /dev/null +++ b/docs/MyFAQ.md @@ -0,0 +1 @@ +- 代码树的accept函数没有定义,因此是不是在写Visitor的“具体Visit函数”时,访问子节点时也要直接调用“具体Visit函数”? \ No newline at end of file diff --git a/include/Evalvisitor.h b/include/Evalvisitor.h index 72983ff..425dfc0 100644 --- a/include/Evalvisitor.h +++ b/include/Evalvisitor.h @@ -2,12 +2,14 @@ #ifndef PYTHON_INTERPRETER_EVALVISITOR_H #define PYTHON_INTERPRETER_EVALVISITOR_H +#include #include +#include #include #include "Python3ParserBaseVisitor.h" #include "int2048/int2048.h" -#include "namescope.h" +#include "names.h" #include "utils.h" class EvalVisitor : public Python3ParserBaseVisitor { diff --git a/include/namescope.h b/include/names.h similarity index 100% rename from include/namescope.h rename to include/names.h diff --git a/readme.md b/readme.md index 1f183b5..8653af5 100644 --- a/readme.md +++ b/readme.md @@ -1,3 +1,5 @@ +[我的设计思路](docs/Design.md) +___ # 🐍Python Interpreter ## 🧾 目录 diff --git a/src/Evalvisitor.cpp b/src/Evalvisitor.cpp index 9d73323..1642405 100644 --- a/src/Evalvisitor.cpp +++ b/src/Evalvisitor.cpp @@ -1,7 +1,10 @@ #include "Evalvisitor.h" +#include +#include + #include "int2048/int2048.h" -#include "namescope.h" +#include "names.h" #include "utils.h" std::any EvalVisitor::visitFile_input(Python3Parser::File_inputContext *ctx) { @@ -26,6 +29,7 @@ std::any EvalVisitor::visitTfpdef(Python3Parser::TfpdefContext *ctx) { } std::any EvalVisitor::visitStmt(Python3Parser::StmtContext *ctx) { + std::cerr << "visitStmt\n" << std::endl; return visitChildren(ctx); } @@ -133,7 +137,7 @@ std::any EvalVisitor::visitTrailer(Python3Parser::TrailerContext *ctx) { } std::any EvalVisitor::visitAtom(Python3Parser::AtomContext *ctx) { - throw FatalError("Not implemented in function visitAtom"); + // throw FatalError("Not implemented in function visitAtom"); return visitChildren(ctx); } diff --git a/src/names.cpp b/src/names.cpp new file mode 100644 index 0000000..623ae4f --- /dev/null +++ b/src/names.cpp @@ -0,0 +1 @@ +#include "names.h" \ No newline at end of file