Python-Interpreter-2020
- 实现大整数运算
- 成员变量
bool sign;1表示正数,0表示负数(*数字0两种符号皆可)vector<int> digit;- 成员函数
bool empty() const;判断是否为0- 重载加减乘除、取模,大小比较等操作
explicit operator string() const;explicit operator double() const;
- 实现不同类型间统一管理,类型包括
int, float, bool, str, None, break, continue, return - 成员变量:除了
None, break, continue,每种类型对应一个成员变量(*return变量定义:vector<AnyType> return_type) - 成员函数
- 实现类型转换,
put2int(), put2float(), put2str(), put2bool(),返回类型是AnyType static void convert(AnyType &, AnyType &)将两个AnyType转换为同类型- 重载加减乘除、取模,大小比较等操作,所有运算符返回类型皆为
AnyType
- 实现类型转换,
- 实现对命名空间的统一管理
- 成员变量
map<string, AnyType> global全局变量存储池vector<map<string, AnyType> > stack手工栈空间
- 进入函数体,把传入的参数放入新的一层
map压栈;退出函数体时弹栈 - 对于
while | if的suite,只需要使用栈顶的命名空间
VisitTest返回string | AnyType,string表示变量名;AnyType表示一个右值visitTestlist返回vector<antlrcpp::Any>其中antlrcpp::Any类型是string | AnyType
所有的传参是否是const引用,无关紧要
不同命名空间的实现对常数影响很小(虽然我的实现已经很简单了)
乘除不需要故意优化(虽然这里常数如果很大的话,BigIntegerTest过不去)
常数最大的是ctx对vector的构造
- 正常的写法应该是:先把
ctx构造的vector存入自己定义的vector中,再操作 - 不要过多使用
ctx->...(int)