upd: add docs
This commit is contained in:
18
docs/Design.md
Normal file
18
docs/Design.md
Normal file
@ -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`,用控制类型这个类型本身标明身份。
|
||||||
|
|
||||||
|
### 函数调用
|
||||||
|
|
||||||
|
### 变量的生效范围与作用域
|
||||||
|
|
||||||
|
## 关键细节
|
||||||
|
### 元组
|
||||||
|
### 左值和右值
|
1
docs/MyFAQ.md
Normal file
1
docs/MyFAQ.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
- 代码树的accept函数没有定义,因此是不是在写Visitor的“具体Visit函数”时,访问子节点时也要直接调用“具体Visit函数”?
|
@ -2,12 +2,14 @@
|
|||||||
#ifndef PYTHON_INTERPRETER_EVALVISITOR_H
|
#ifndef PYTHON_INTERPRETER_EVALVISITOR_H
|
||||||
#define PYTHON_INTERPRETER_EVALVISITOR_H
|
#define PYTHON_INTERPRETER_EVALVISITOR_H
|
||||||
|
|
||||||
|
#include <any>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
|
#include <iostream>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
#include "Python3ParserBaseVisitor.h"
|
#include "Python3ParserBaseVisitor.h"
|
||||||
#include "int2048/int2048.h"
|
#include "int2048/int2048.h"
|
||||||
#include "namescope.h"
|
#include "names.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
class EvalVisitor : public Python3ParserBaseVisitor {
|
class EvalVisitor : public Python3ParserBaseVisitor {
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
[我的设计思路](docs/Design.md)
|
||||||
|
___
|
||||||
# 🐍Python Interpreter
|
# 🐍Python Interpreter
|
||||||
|
|
||||||
## 🧾 目录
|
## 🧾 目录
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
#include "Evalvisitor.h"
|
#include "Evalvisitor.h"
|
||||||
|
|
||||||
|
#include <any>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
#include "int2048/int2048.h"
|
#include "int2048/int2048.h"
|
||||||
#include "namescope.h"
|
#include "names.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
std::any EvalVisitor::visitFile_input(Python3Parser::File_inputContext *ctx) {
|
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::any EvalVisitor::visitStmt(Python3Parser::StmtContext *ctx) {
|
||||||
|
std::cerr << "visitStmt\n" << std::endl;
|
||||||
return visitChildren(ctx);
|
return visitChildren(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,7 +137,7 @@ std::any EvalVisitor::visitTrailer(Python3Parser::TrailerContext *ctx) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::any EvalVisitor::visitAtom(Python3Parser::AtomContext *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);
|
return visitChildren(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
src/names.cpp
Normal file
1
src/names.cpp
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "names.h"
|
Reference in New Issue
Block a user