This commit is contained in:
Wankupi
2023-10-30 19:34:40 +08:00
commit 2e29af68b3
107 changed files with 7880 additions and 0 deletions

9
.gitignore vendored Normal file
View File

@ -0,0 +1,9 @@
# IDE files
.idea/
cmake-build-debug/
build/
gen/
antlr-playground/.antlr
resources/.antlr
# Testcases
testcases/hidden-testcases

23
CMakeLists.txt Normal file
View File

@ -0,0 +1,23 @@
### YOU CAN'T MODIFY THE CODE BELOW
cmake_minimum_required(VERSION 3.15.2)
project(python_interpreter)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Ofast")
include_directories(/usr/include/antlr4-runtime/)
include_directories(
${PROJECT_SOURCE_DIR}/generated/
${PROJECT_SOURCE_DIR}/src/
)
add_subdirectory(${PROJECT_SOURCE_DIR}/generated)
### YOU CAN"T MODIFY THE CODE ABOVE
file(GLOB_RECURSE main_src src/*.cpp)
add_executable(code ${main_src}) # Add all *.cpp file after src/main.cpp, like src/Evalvisitor.cpp did
### YOU CAN'T MODIFY THE CODE BELOW
target_link_libraries(code PyAntlr)
target_link_libraries(code antlr4-runtime)
### YOU CAN"T MODIFY THE CODE ABOVE

116
Prework/README.md Normal file
View File

@ -0,0 +1,116 @@
# 四则运算计算器
## 题目描述
现在,你需要实现全部的四则运算的功能,即加减乘除。简单起见,我们已经将复杂的输入的表达式解析成了树形结构,其定义如下:
- 每个节点 $node$ 可以是一个数字,或者是一个运算符。其表示一个值,记作 $val(node)$ 。
- 如果一个节点是数字节点,数字的值为 $n$ ,那么 $val(node) = n$ 。
- 如果一个节点是运算符节点,运算符为 $op$ ,那么其有两个子节点 $l$ 和 $r$ ,且 $val(node) = val(l) ~\ op ~\ val(r)$ 。
## std::any
需要注意的是,在我们的代码中出现了 `std::any` 。其表现类似 python 中的变量,即可以保存任何类型的值。通过 `std::any_cast` 函数 ,我们可以判断 `any` 是否判断了某一类型的值,并且获取其值。具体如何使用,请参考 [cpprefence](https://en.cppreference.com/w/cpp/utility/any) 。
最基本的用法大致如下:
```C++
std::any x = (int)1;
x = 2;
// 如果存储的是 int 类型,返回指向该值的指针
// 否则返回空指针 nullptr
int *ptr = std::any_cast <int> (&x);
// 如果存储的是 int 类型,返回该值
// 否则抛出异常
int val = std::any_cast <int> (x);
// 如果存储的是 int 类型,返回该值的引用
// 否则抛出异常
int &ref = std::any_cast <int&> (x);
```
在本题中,我们保证同一颗表达式树中,数字节点的值都是 `long long` 类型或者 `double` 类型。当然,你需要保证输出 `std::any` 的类型与之相同。
## 题目模板
节点的具体定义在 [visitor.h](visitor.h) 。你不可以修改这些代码。
```C++
// 你不可以修改这份代码
#pragma once
#include <any>
struct visitor;
struct node {
virtual std::any accept(visitor *) = 0;
virtual ~node() = default;
};
struct num_node;
struct add_node;
struct sub_node;
struct mul_node;
struct div_node;
struct visitor {
virtual std::any visit(node *ctx) { return ctx->accept(this); }
virtual std::any visit_num(num_node *) = 0;
virtual std::any visit_add(add_node *) = 0;
virtual std::any visit_sub(sub_node *) = 0;
virtual std::any visit_mul(mul_node *) = 0;
virtual std::any visit_div(div_node *) = 0;
virtual ~visitor() = default;
};
struct num_node final : node {
std::any number;
std::any accept(visitor *ctx) override { return ctx->visit_num(this); }
~num_node() override = default;
};
struct add_node final : node {
node *lnode;
node *rnode;
std::any accept(visitor *ctx) override { return ctx->visit_add(this); }
~add_node() override = default;
};
struct sub_node final : node {
node *lnode;
node *rnode;
std::any accept(visitor *ctx) override { return ctx->visit_sub(this); }
~sub_node() override = default;
};
struct mul_node final : node {
node *lnode;
node *rnode;
std::any accept(visitor *ctx) override { return ctx->visit_mul(this); }
~mul_node() override = default;
};
struct div_node final : node {
node *lnode;
node *rnode;
std::any accept(visitor *ctx) override { return ctx->visit_div(this); }
~div_node() override = default;
};
```
现在,你需要按照要求实现一个 `calculator` 类。对于一个 `calculator` 对象,通过虚函数重写基类 `visitor` 的接口。我们希望每次调用其 `visit` 方法,可以返回表达式的结果,且不修改原本的表达式。
```C++
#include "visitor.h"
struct calculator : visitor {
/// TODO: 完成所有需求,这应该不难
~calculator() override = default;
};
```
你需要提交这份[代码](calc.h)

9
Prework/calc.h Normal file
View File

@ -0,0 +1,9 @@
// 你需要提交这份代码
#pragma once
#include "visitor.h"
struct calculator : visitor {
/// TODO: 完成所有需求
~calculator() override = default;
};

34
Prework/test.cpp Normal file
View File

@ -0,0 +1,34 @@
// 这是一份测试代码,仅供参考
// #include "calc_std.h"
#include "calc.h"
#include <iostream>
node *generate(int);
// Expected: 17711
signed main() {
node *root = generate(20);
visitor *calc = new calculator;
auto result = calc->visit(root);
if (auto value = std::any_cast <double> (&result)) {
std::cout << "Result: " << *value << '\n';
} else {
std::cout << "Wrong Type" << '\n';
}
return 0;
}
// 生成器,小孩子不懂写着玩的
node *generate(int depth) {
if (depth <= 0) {
num_node *ret = new num_node;
ret->number = (double)1.0;
return ret;
}
add_node *root = new add_node;
root->lnode = generate(depth - 1);
root->rnode = generate(depth - 2);
return root;
}

60
Prework/visitor.h Normal file
View File

@ -0,0 +1,60 @@
// 你不可以修改这份代码
#pragma once
#include <any>
struct visitor;
struct node {
virtual std::any accept(visitor *) = 0;
virtual ~node() = default;
};
struct num_node;
struct add_node;
struct sub_node;
struct mul_node;
struct div_node;
struct visitor {
virtual std::any visit(node *ctx) { return ctx->accept(this); }
virtual std::any visit_num(num_node *) = 0;
virtual std::any visit_add(add_node *) = 0;
virtual std::any visit_sub(sub_node *) = 0;
virtual std::any visit_mul(mul_node *) = 0;
virtual std::any visit_div(div_node *) = 0;
virtual ~visitor() = default;
};
struct num_node final : node {
std::any number;
std::any accept(visitor *ctx) override { return ctx->visit_num(this); }
~num_node() override = default;
};
struct add_node final : node {
node *lnode;
node *rnode;
std::any accept(visitor *ctx) override { return ctx->visit_add(this); }
~add_node() override = default;
};
struct sub_node final : node {
node *lnode;
node *rnode;
std::any accept(visitor *ctx) override { return ctx->visit_sub(this); }
~sub_node() override = default;
};
struct mul_node final : node {
node *lnode;
node *rnode;
std::any accept(visitor *ctx) override { return ctx->visit_mul(this); }
~mul_node() override = default;
};
struct div_node final : node {
node *lnode;
node *rnode;
std::any accept(visitor *ctx) override { return ctx->visit_div(this); }
~div_node() override = default;
};

86
docs/antlr_guide.md Normal file
View File

@ -0,0 +1,86 @@
# ANTLR in Python Interpreter
## 配置教程
### 配置 Antlr C++ 运行环境
Python 解释器采用 Antlr 作为前端语法分析器,其中核心代码编译时间较长,因此我们提前编译好了 Antlr 的运行环境,这样你的程序在编译时就不需要再编译 Antlr 的运行环境了。
为了在你自己的电脑上也使用 Antlr 运行环境,你需要将 Antlr 编译好的运行环境安装到你的电脑上。
`antlr-runtime_4.13.1_amd64.deb` 文件下载到 WSL 中,打开文件所在目录,执行以下命令安装:
```shell
sudo apt install ./antlr-runtime_4.13.1_amd64.deb
```
在这个包中,含有 Antlr 4.13.1 的动态链接库、静态链接库以及头文件,如果不装这个包,
将导致你的程序在编译时找不到 Antlr 的头文件和动态链接库,从而编译失败。
使用 Archlinux 的同学可以直接使用以下命令安装运行环境:
```shell
pacman -S antlr4-runtime
```
如有在其他环境下编程的同学(比如 Windows、Mac 和除 Debian,Arch 之外的 Linux 系统),请联系助教。
### 生成语法树
#### 使用 VScode 插件(推荐)
首先在 Windows 环境下安装插件(注意,不要在 WSL 环境下安装):
![vscode-plugin](https://github.com/ACMClassCourse-2023/Python-Interpreter-2023/blob/main/docs/vscode-plugin.png)
安装后,点击卸载旁的箭头,安装 2.3.1 版本。
![vscode-install](https://github.com/ACMClassCourse-2023/Python-Interpreter-2023/blob/main/docs/vscode-install.png)
安装完后重新加载。打开 `Python3.g4` 文件,右边会出现对应插件的图标,点击,等待其中的 PARSER RULES 等部分加载完毕。
![vscode-antlr](https://github.com/ACMClassCourse-2023/Python-Interpreter-2023/blob/main/docs/vscode-antlr.png)
接下来配置运行文件。点击左侧的运行和调试,创建 `launch.json` 文件,并写入
```javascript
{
"version": "2.3.1",
"configurations": [
{
"name": "Debug ANTLR4 grammar",
"type": "antlr-debug",
"request": "launch",
"input": "./a.txt", // 输入文件(即你要运行的 Python 代码文件)
"grammar": "./resources/Python3Parser.g4", // 语法文件
"startRule": "file_input", // 语法入口规则,我们的公式语法入口规则是 file_input
"printParseTree": true, // 是否 打印/可视化 parse tree
"visualParseTree": true
}
]
}
```
最后打开要运行的文件,在左侧的运行和调试中,点击运行即可生成,如下图所示。
![vscode-antlr-result](https://github.com/ACMClassCourse-2023/Python-Interpreter-2023/blob/main/docs/vscode-antlr-result.png)
#### 使用 Clion 插件
由于本次 `.g4` 文件的特性,目前 ANTLR 插件只能支持不带 `INDENT``DEDENT` 规则的解释。
首先在插件市场中找到插件:
![plugin-market](https://github.com/ACMClassCourse-2023/Python-Interpreter-2023/blob/main/docs/plugin-market.png)
安装后,右键 `.g4` 中的 `return_stmt` 或任何不包含 `INDENT``DEDENT` 的规则,点击 `test rule`
![right-click](https://github.com/ACMClassCourse-2023/Python-Interpreter-2023/blob/main/docs/right-click.png)
之后在屏幕下方的 `antlr-preview` 中,左侧是待测试的代码,右侧是依据代码生成的语法树结构图。
## ANTLR 是什么
ANTLR全名ANother Tool for Language Recognition是基于 LL(\*)算法实现的语法解析器生成器parser generator用 Java 语言编写使用自上而下top-down的递归下降 LL 剖析器方法。
ANTLR 可以将输入的代码转化成与之对应的**树形结构**,即语法树,以便后续程序操作。按照上面的配置操作,即可得到一份 `Python` 代码对应的语法树。

239
docs/grammar.md Normal file
View File

@ -0,0 +1,239 @@
## Specific Python
### I. 程序结构
按照控制流逐行执行。
### II. 语法规则
#### 1. 字符集合
ASCII 编码,区分大小写,中文字符是**未定义**的,合法字符集如下:
- **标识符**包括变量标识符、函数标识符26 个小写英语字母26 个大写英语字母,数码 `0``9`,下划线 `_`
- **标准运算符**:加号 `+`,减号 `-`,乘号 `*`,浮点除 `/`,整除`//`,取模 `%`
- **关系运算符**:大于 `>`,小于 `<`,大于等于 `>=`,小于等于 `<=`,不等于 `!=`,等于 `==`
- **增量运算符**:加法 `+=`,减法 `-=`,乘法 `*=`,浮点除 `/=`,整除 `//=`,取模`%=`
- **赋值运算符**:赋值 `=`
- **下标运算符**:取下标对象 `[]`
- **优先级运算符**:括号 `()`
- **分隔符**:逗号 `,`
- **特殊符号**:空格 ` `,换行符 `\n`,制表符 `\t`,注释标识符 `#`,字符串标识符 `"``'`
#### 2. 关键字
```python
None
True
False
def
return
break
continue
if
elif
else
while
or
and
not
```
关键字不可作为变量名或函数名。
#### 3. 空白字符
**空格**、**制表符**在源文件中可以区分词素 (Token),同时在一行的开头可以表示缩进。
**换行符**表示新的语句的开始。
缩进在 Python 用于识别代码块,相关问题将在 Parser 中使用 Antlr4 解决,无需考虑相关的实现。
#### 4. 注释
`#` 开始到本行结束的内容都会被作为注释。
#### 5. 标识符
标识符的第一个字符必须是英文字母,第二个字符开始可以是英文字母、数字或者下划线。
标识符区分大小写。长度超过 $64$ 个字符的标识符是**未定义**的。
#### 6. 常量
- 逻辑常量:`True` 为真,`False` 为假
- 整数常量:
- 整数常量以十进制表示,非十进制的表示为**未定义**行为
- 整数常量不设负数,负数可以由正数取负号得到
- Python 中,整数的范围是没有限制的,此处同理,这意味着你必须实现高精度整数
- 首位为 $0$ 的整数常量是**未定义**的
- 浮点数常量:
- 浮点数常量以十进制表示
- 浮点数常量不设负数,负数可以由正数取负号得到
- 拥有前导 $0$ 的浮点数为**未定义**的,如`0001.1`
- 含有 e 的浮点数为**未定义**的,如 `1e5`
- 以 . 开头的浮点数为**未定义**的,如 `.123`
- 字符串常量
- 字符串常量是由双引号 `"` 或单引号 `'` 括起来的字符串
- 可以由两个字符串拼接而形成新的字符串常量。如 `"123""456"` 相当于 `"123456"`
- 字符串中的所有字符必须是可示字符 (printable character) 或空格中的一种
- 空值常量:`None` 用来表示变量没有指向任何值
### 7. 数据类型
- `bool`:只有 `True``False`
- `int`:高精度整数
- `float`: 与 C++ 中的 `double` 一致
- `str`:字符串,**不可修改!**
- 元组: 具体表现请参考 python (待完善)
### 8. 表达式
#### 8.1. 基础表达式
基础表达式包括单独出现的常量、变量、函数调用和数组访问。
#### 8.2. 算术表达式
合法的算术运算符包括:`+`, `-`, `*`, `/`, `//`, `%`,具体行为可以参照 C++,特殊行为有:
- 字符串运算符
- `str + str` 表示字符串的拼接
- `str * int` 表示字符串的重复
- `str <= str` 表示字符串的比较,比较规则同 C++ `std::striing``>=`, `==`等同理
- 除法
- `/` 表示浮点除,即计算结果为浮点数
- `//` 表示整除,即计算结果为整数。注意无论正负皆**向下取整**,例如 `-5 // 3 = -2`
- `%` 表示模运算,无论模数的正负,皆定义为:`a % b = a - (a // b) * b`
- 连续比较
- 存在 `1<2>3` 这样连续的关系运算符,处理方法是将其拆为相邻的比较并用 `and` 连接但**每个值最多只计算一次**
-`a()<b()<c()`,等价于先翻译成 `a()<b() and b()<c()` 再进行计算, `a(),b(),c()` 最多只调用一次(因为短路运算符)
- 逻辑运算符
- `and` 等价于 C++ 中的 `&&``or` 等价于 C++ 中的 `||` `not` 等价于 C++ 中的 `!`
- `and``or` 为**短路**运算符
- **隐式转化**
- 运算时如果两个运算数类型不一致,需转化成相同类型之后再进行运算
- 具体转化规则参考 C++
不包含在特殊行为和 C++ 标准中的行为均为**未定义**行为。
#### 8.3. 赋值表达式
- 语法与具体行为均可以参照 C++,并无特殊差异
- 给一个变量赋值的意义是将这个变量指向右值,右值不管类型
- **与标准 Python 不同,全局变量的生效范围是全部范围**(不用 global 关键字即可访问)
- 局部变量的生效范围是在当前语句块(被缩进和取消缩进包起来的部分),具体局部变量和全局变量划分规则和 C++ 一样
- **只有函数的定义会产生新的作用域**,作用域的产生请参考 Python
-`a=1,a=”123”,a=1.1` 这三条语句依次执行,再输出 `a`,结果是 `1.1`,允许变量遮蔽
- 可以给多变量赋值,如 `a,b=1,2` 意思是 `a=1,b=2` 依次执行,此处或与标准 Python **不同**
- 增量赋值即为普通算术运算的简化表达,具体行为参考 C++
#### 8.4. 运算符优先级
从低到高依次为(其中处在相同行的运算符优先级相同)
```python
=
or
and
not
< > <= >= == !=
+ -
* / // %
()
```
### 9. 语句
#### 9.1. 变量定义/赋值语句
- 单变量赋值:`var = value`
- 连续赋值:`var_1 = var_2 = ... = value`
参考[赋值表达式](####8.3. 赋值表达式)。
#### 9.2. 表达式语句
参考[表达式](###8. 表达式)
#### 9.3. 条件语句
```python
if expression_1:
# code block
elif expression_2:
# code block
else expression_3:
# code block
```
`elif` 相当于 `else if``else` 可以没有。
#### 9.4. 循环语句
```python
while expression:
# code block
```
#### 9.5. 跳转语句
- 包括 `return``break`,和 `continue`
- 具体行为参考 C++
### 10. 函数
#### 10.1. 函数定义
```python
def func(parameters):
# code block
```
- 参数列表如 `a, b, c`,变量名之间用逗号分隔,可以为空
- 有些变量可以有默认值,但是都必须出现在无默认值的变量后面
- 函数可以有返回值,也可以没有返回值,无需显示声明。返回值可以为多变量,如 `return a, b`
#### 10.2. 函数调用
```python
func(parameters)
```
- 函数调用必须出现在该函数定义后。
- 参数有两种形式keyword 和 positional
- Keyword argument 比如 `foo(a=1,b=2)` 表示传入参数 `a` 的值为 `1``b` 的值 `2`
- Positional argument 是指 `foo(1,2)` 这样按照出现顺序指代参数
- 若一个参数列表中同时有两种参数形式,那么 positional argument 必须出现在 keyword argument 之前。如 `foo(1,b=2)`
- 数据保证递归层数不超过 $2000$ 层
### 11. 内建函数
- `print`:输出,可以有任意个参数,逐个输出,中间用空格分隔。输出后换行。输出 `float` 保留 $6$ 位小数。输出字符串不要输出前后面的引号。如 `print("123",1.0)` 请输出 `123 1.000000`
- `int`:将 `float``bool``str` 转成 `int`
- `float`: 将 `int``bool``str` 转成 `float`
- `str``int``float``bool` 转成 `str`
- `bool``int``float``str` 转成 `bool`。对于 `str`,如果是 `""` 则为 `False`,否则为 `True`
- 转型类函数都只有一个参数。

View File

@ -0,0 +1,2 @@
# 实现细节

BIN
docs/plugin-market.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 KiB

BIN
docs/right-click.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

14
docs/suggestions.md Normal file
View File

@ -0,0 +1,14 @@
### 一些小建议
0. 有搞不明白的问题找助教啦~
1. git仓库中放置测试点可能使你的仓库克隆时间增长导致评测变慢。
推荐将本仓库下载到本地后,只在你的仓库中放置必要的文件。
2. 建议使用多文件编程。将整个解释器分成多个模块,分别写在不同的文件中。
3. 清楚调用的函数的复杂度。
4. 你可以先 `using int2048 = long long;` 来方便前期编写。
TO_BE_CONTINUED

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
docs/vscode-antlr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
docs/vscode-install.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
docs/vscode-plugin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

182
docs/workflow_details.md Normal file
View File

@ -0,0 +1,182 @@
# 解释器作业的完成流程
## Step 1. 配置环境
见文档 [antlr_guide.md](antlr_guide.md)。
## Step 2. 阅读 "./resources/Python3Parser.g4"
**阅读 `.g4` 文件需要一定的正则表达式基础。**
如果你不会正则表达式,可以参考 [正则表达式 - 维基百科](https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F)。
我们假设有这样的语法规则(并不是我们这次作业的一部分):
```
plus: NUMBER '+' NUMBER;
NUMBER:[0-9]+;
ADD:'+';
```
## Step 3. 阅读 "./generated/Python3Parser.h"
你可以看到以下代码(对应着上面的语法规则):
```c++
//...............
class PlusContext : public antlr4::ParserRuleContext {
public:
PlusContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
std::vector<antlr4::tree::TerminalNode *> NUMBER();
antlr4::tree::TerminalNode* NUMBER(size_t i);
antlr4::tree::TerminalNode* ADD();
virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
}
//...............
```
因为在上述的 `plus` 语法中,`NUMBER` 一定要出现至少一次,所以 `PlusContext` 有以下两个函数:
```c++
std::vector<antlr4::tree::TerminalNode *> NUMBER();
antlr4::tree::TerminalNode* NUMBER(size_t i);
```
第一个函数返回一个 `vector`,包含了指向所有 `NUMBER` 的指针,第二个函数返回指向第 i 个 `NUMBER` 的指针,从 0 开始。
因为 `ADD` 只在 `plus` 中出现了一次,所以它只有以下函数,返回指向唯一的 `ADD` 的指针:
```c++
antlr4::tree::TerminalNode* ADD()
```
对于一个 `temrinal node`,有以下方法:
```c++
//...............
std::string toString()
Token* TerminalNodeImpl::getSymbol()
/*
* for example, consider:
* antlr4::tree::TerminalNode *it;
* it->toString() returns the string, for example, "123456" or "a"
* (so you need to converse (std::string)"123456" to (int)123456)
* it->getSymbol()->getTokenIndex() returns where this word is in the whole input.
*/
//...............
```
## Step 4. 完成 "./src/Evalvisitor.h"
在这一步中,所要做的就是补全相关代码:
```c++
//...............
std::any visitPlus(Python3Parser::PlusContext *ctx)
{
/*
* TODO
* the pseudo-code is:
* return visit(ctx->NUMBER(0))+visit(ctx->NUMBER(1));
*/
}
//...............
```
当写:
```c++
visit(ctx->NUMBER(0))
```
等价于写:
```c++
visitAtom(ctx->NUMBER(0))
```
所以我们只需要用 `visit` 函数来访问各种结点,而不是用 `visitBalabala`,想想为什么?
## Step 5. 编译程序
输入以下代码即可:
```sh
cmake -B build
cmake --build build
```
如果你不会使用 `cmake`,你可以借助于 `Clion` 来实现,如果你不知道这步如何操作,请询问助教。
## 神奇的 std::any
关于这个类,你只需要会一个方法:`std::any_cast`。
譬如说,如果有以下的语法规则:
```
plus: atom '+' atom;
atom: NUMBER | STRING+;
NUMBER:[0-9]+;
STRING:[A-Z]+;
ADD:'+';
```
在 Parser.h 中的 `Context` 长这样:
```c++
//...............
class PlusContext : public antlr4::ParserRuleContext {
public:
PlusContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
std::vector<AtomContext*> atom();
AtomContext* atom(size_t i);
antlr4::tree::TerminalNode* ADD()
virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;
virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
}
//notice that the atom is AtomContext* type rather than a TerminalNode* type.
//an easy way to tell the difference is: capital letter-TerminalNode; xxxContext otherwise
//...............
```
那么相应的代码就长这样:
```c++
//...............
std::any visitPlus(Python3Parser::PlusContext *ctx)
{
auto ret1 = visit(ctx->NUMBER());
auto ret2 = visit(ctx->NUMBER());
if (auto v1int = std::any_cast<int*>(ret1), v2int = std::any_cast<int*>(ret2);
v1int && v2int)
return *v1int + *v2int;
else if (auto v1str = std::any_cast<string*>(ret1), v2str = std::any_cast<string*>(ret2);
v1str && v2str)
return *v1str + *v2str;
else
throw(std::string("unsupported operand type(s) for +: ") + ret1.type().name() + " + " + ret2.type().name());//no need
}
//...............
```
我们保证测试文件的语法都是正确的,所以后两行实则是不需要的。
`any_cast` 模板函数可以直接将 `any` 类型转换为你想要的类型,但是如果转换失败,它会直接抛出异常。
而在上文的代码中,我们向模板填入的类型是目标类型的引用,所以如果类型不匹配、转换失败,它会返回 `nullptr`。
在 OOP 课程中,你们将会学习构造函数和析构函数。所以你们最好是在理解 `std::any` 是如何构造与析构的基础上,进行编程。通过阅读[cppreference](https://zh.cppreference.com/w/cpp/utility/any)来理解。如果这对于你们来说太过困难,请求助助教。
https://www.cnblogs.com/mangoyuan/p/6446046.html
https://www.cnblogs.com/xiaoshiwang/p/9590029.html
搜索 "C++11 traits" 来获得更多信息。

7
generated/CMakeLists.txt Normal file
View File

@ -0,0 +1,7 @@
cmake_minimum_required(VERSION 3.15)
include_directories(/usr/include/antlr4-runtime/)
file(GLOB PyAntlrSrc *.cpp)
add_library(PyAntlr STATIC ${PyAntlrSrc})

632
generated/Python3Lexer.cpp Normal file
View File

@ -0,0 +1,632 @@
#include <list>
#include <regex>
// Generated from Python3Lexer.g4 by ANTLR 4.13.1
#include "Python3Lexer.h"
using namespace antlr4;
using namespace antlr4;
namespace {
struct Python3LexerStaticData final {
Python3LexerStaticData(std::vector<std::string> ruleNames,
std::vector<std::string> channelNames,
std::vector<std::string> modeNames,
std::vector<std::string> literalNames,
std::vector<std::string> symbolicNames)
: ruleNames(std::move(ruleNames)), channelNames(std::move(channelNames)),
modeNames(std::move(modeNames)), literalNames(std::move(literalNames)),
symbolicNames(std::move(symbolicNames)),
vocabulary(this->literalNames, this->symbolicNames) {}
Python3LexerStaticData(const Python3LexerStaticData&) = delete;
Python3LexerStaticData(Python3LexerStaticData&&) = delete;
Python3LexerStaticData& operator=(const Python3LexerStaticData&) = delete;
Python3LexerStaticData& operator=(Python3LexerStaticData&&) = delete;
std::vector<antlr4::dfa::DFA> decisionToDFA;
antlr4::atn::PredictionContextCache sharedContextCache;
const std::vector<std::string> ruleNames;
const std::vector<std::string> channelNames;
const std::vector<std::string> modeNames;
const std::vector<std::string> literalNames;
const std::vector<std::string> symbolicNames;
const antlr4::dfa::Vocabulary vocabulary;
antlr4::atn::SerializedATNView serializedATN;
std::unique_ptr<antlr4::atn::ATN> atn;
};
::antlr4::internal::OnceFlag python3lexerLexerOnceFlag;
#if ANTLR4_USE_THREAD_LOCAL_CACHE
static thread_local
#endif
Python3LexerStaticData *python3lexerLexerStaticData = nullptr;
void python3lexerLexerInitialize() {
#if ANTLR4_USE_THREAD_LOCAL_CACHE
if (python3lexerLexerStaticData != nullptr) {
return;
}
#else
assert(python3lexerLexerStaticData == nullptr);
#endif
auto staticData = std::make_unique<Python3LexerStaticData>(
std::vector<std::string>{
"STRING", "NUMBER", "INTEGER", "DEF", "RETURN", "IF", "ELIF", "ELSE",
"WHILE", "FOR", "IN", "OR", "AND", "NOT", "NONE", "TRUE", "FALSE",
"CONTINUE", "BREAK", "NEWLINE", "NAME", "STRING_LITERAL", "BYTES_LITERAL",
"DECIMAL_INTEGER", "OCT_INTEGER", "HEX_INTEGER", "BIN_INTEGER", "FLOAT_NUMBER",
"IMAG_NUMBER", "DOT", "ELLIPSIS", "STAR", "OPEN_PAREN", "CLOSE_PAREN",
"COMMA", "COLON", "SEMI_COLON", "POWER", "ASSIGN", "OPEN_BRACK", "CLOSE_BRACK",
"OR_OP", "XOR", "AND_OP", "LEFT_SHIFT", "RIGHT_SHIFT", "ADD", "MINUS",
"DIV", "MOD", "IDIV", "NOT_OP", "OPEN_BRACE", "CLOSE_BRACE", "LESS_THAN",
"GREATER_THAN", "EQUALS", "GT_EQ", "LT_EQ", "NOT_EQ_1", "NOT_EQ_2",
"AT", "ARROW", "ADD_ASSIGN", "SUB_ASSIGN", "MULT_ASSIGN", "AT_ASSIGN",
"DIV_ASSIGN", "MOD_ASSIGN", "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN",
"LEFT_SHIFT_ASSIGN", "RIGHT_SHIFT_ASSIGN", "POWER_ASSIGN", "IDIV_ASSIGN",
"SKIP_", "UNKNOWN_CHAR", "SHORT_STRING", "LONG_STRING", "LONG_STRING_ITEM",
"LONG_STRING_CHAR", "STRING_ESCAPE_SEQ", "NON_ZERO_DIGIT", "DIGIT",
"OCT_DIGIT", "HEX_DIGIT", "BIN_DIGIT", "POINT_FLOAT", "EXPONENT_FLOAT",
"INT_PART", "FRACTION", "EXPONENT", "SHORT_BYTES", "LONG_BYTES", "LONG_BYTES_ITEM",
"SHORT_BYTES_CHAR_NO_SINGLE_QUOTE", "SHORT_BYTES_CHAR_NO_DOUBLE_QUOTE",
"LONG_BYTES_CHAR", "BYTES_ESCAPE_SEQ", "SPACES", "COMMENT", "LINE_JOINING",
"ID_START", "ID_CONTINUE"
},
std::vector<std::string>{
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
},
std::vector<std::string>{
"DEFAULT_MODE"
},
std::vector<std::string>{
"", "", "", "", "", "", "'def'", "'return'", "'if'", "'elif'", "'else'",
"'while'", "'for'", "'in'", "'or'", "'and'", "'not'", "'None'", "'True'",
"'False'", "'continue'", "'break'", "", "", "", "", "", "", "", "",
"", "", "'.'", "'...'", "'*'", "'('", "')'", "','", "':'", "';'",
"'**'", "'='", "'['", "']'", "'|'", "'^'", "'&'", "'<<'", "'>>'",
"'+'", "'-'", "'/'", "'%'", "'//'", "'~'", "'{'", "'}'", "'<'", "'>'",
"'=='", "'>='", "'<='", "'<>'", "'!='", "'@'", "'->'", "'+='", "'-='",
"'*='", "'@='", "'/='", "'%='", "'&='", "'|='", "'^='", "'<<='", "'>>='",
"'**='", "'//='"
},
std::vector<std::string>{
"", "INDENT", "DEDENT", "STRING", "NUMBER", "INTEGER", "DEF", "RETURN",
"IF", "ELIF", "ELSE", "WHILE", "FOR", "IN", "OR", "AND", "NOT", "NONE",
"TRUE", "FALSE", "CONTINUE", "BREAK", "NEWLINE", "NAME", "STRING_LITERAL",
"BYTES_LITERAL", "DECIMAL_INTEGER", "OCT_INTEGER", "HEX_INTEGER",
"BIN_INTEGER", "FLOAT_NUMBER", "IMAG_NUMBER", "DOT", "ELLIPSIS", "STAR",
"OPEN_PAREN", "CLOSE_PAREN", "COMMA", "COLON", "SEMI_COLON", "POWER",
"ASSIGN", "OPEN_BRACK", "CLOSE_BRACK", "OR_OP", "XOR", "AND_OP", "LEFT_SHIFT",
"RIGHT_SHIFT", "ADD", "MINUS", "DIV", "MOD", "IDIV", "NOT_OP", "OPEN_BRACE",
"CLOSE_BRACE", "LESS_THAN", "GREATER_THAN", "EQUALS", "GT_EQ", "LT_EQ",
"NOT_EQ_1", "NOT_EQ_2", "AT", "ARROW", "ADD_ASSIGN", "SUB_ASSIGN",
"MULT_ASSIGN", "AT_ASSIGN", "DIV_ASSIGN", "MOD_ASSIGN", "AND_ASSIGN",
"OR_ASSIGN", "XOR_ASSIGN", "LEFT_SHIFT_ASSIGN", "RIGHT_SHIFT_ASSIGN",
"POWER_ASSIGN", "IDIV_ASSIGN", "SKIP_", "UNKNOWN_CHAR"
}
);
static const int32_t serializedATNSegment[] = {
4,0,80,732,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,
6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,
7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,
7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2,28,
7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,2,33,7,33,2,34,7,34,2,35,
7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7,39,2,40,7,40,2,41,7,41,2,42,
7,42,2,43,7,43,2,44,7,44,2,45,7,45,2,46,7,46,2,47,7,47,2,48,7,48,2,49,
7,49,2,50,7,50,2,51,7,51,2,52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,
7,56,2,57,7,57,2,58,7,58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,
7,63,2,64,7,64,2,65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,
7,70,2,71,7,71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,
7,77,2,78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,
7,84,2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2,91,
7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7,97,2,98,
7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103,7,103,2,104,
7,104,1,0,1,0,3,0,214,8,0,1,1,1,1,1,1,3,1,219,8,1,1,2,1,2,1,2,1,2,3,2,
225,8,2,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,6,1,
6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,
1,9,1,10,1,10,1,10,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,13,1,13,1,13,
1,13,1,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,
1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,
1,18,1,18,1,18,1,18,1,19,1,19,1,19,3,19,309,8,19,1,19,1,19,3,19,313,8,
19,1,19,3,19,316,8,19,3,19,318,8,19,1,19,1,19,1,20,1,20,5,20,324,8,20,
10,20,12,20,327,9,20,1,21,1,21,1,21,1,21,1,21,3,21,334,8,21,1,21,1,21,
3,21,338,8,21,1,22,1,22,1,22,1,22,1,22,3,22,345,8,22,1,22,1,22,3,22,349,
8,22,1,23,1,23,5,23,353,8,23,10,23,12,23,356,9,23,1,23,4,23,359,8,23,
11,23,12,23,360,3,23,363,8,23,1,24,1,24,1,24,4,24,368,8,24,11,24,12,24,
369,1,25,1,25,1,25,4,25,375,8,25,11,25,12,25,376,1,26,1,26,1,26,4,26,
382,8,26,11,26,12,26,383,1,27,1,27,3,27,388,8,27,1,28,1,28,3,28,392,8,
28,1,28,1,28,1,29,1,29,1,30,1,30,1,30,1,30,1,31,1,31,1,32,1,32,1,32,1,
33,1,33,1,33,1,34,1,34,1,35,1,35,1,36,1,36,1,37,1,37,1,37,1,38,1,38,1,
39,1,39,1,39,1,40,1,40,1,40,1,41,1,41,1,42,1,42,1,43,1,43,1,44,1,44,1,
44,1,45,1,45,1,45,1,46,1,46,1,47,1,47,1,48,1,48,1,49,1,49,1,50,1,50,1,
50,1,51,1,51,1,52,1,52,1,52,1,53,1,53,1,53,1,54,1,54,1,55,1,55,1,56,1,
56,1,56,1,57,1,57,1,57,1,58,1,58,1,58,1,59,1,59,1,59,1,60,1,60,1,60,1,
61,1,61,1,62,1,62,1,62,1,63,1,63,1,63,1,64,1,64,1,64,1,65,1,65,1,65,1,
66,1,66,1,66,1,67,1,67,1,67,1,68,1,68,1,68,1,69,1,69,1,69,1,70,1,70,1,
70,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,74,1,74,1,
74,1,74,1,75,1,75,1,75,1,75,1,76,1,76,1,76,3,76,528,8,76,1,76,1,76,1,
77,1,77,1,78,1,78,1,78,5,78,537,8,78,10,78,12,78,540,9,78,1,78,1,78,1,
78,1,78,5,78,546,8,78,10,78,12,78,549,9,78,1,78,3,78,552,8,78,1,79,1,
79,1,79,1,79,1,79,5,79,559,8,79,10,79,12,79,562,9,79,1,79,1,79,1,79,1,
79,1,79,1,79,1,79,1,79,5,79,572,8,79,10,79,12,79,575,9,79,1,79,1,79,1,
79,3,79,580,8,79,1,80,1,80,3,80,584,8,80,1,81,1,81,1,82,1,82,1,82,1,82,
3,82,592,8,82,1,83,1,83,1,84,1,84,1,85,1,85,1,86,1,86,1,87,1,87,1,88,
3,88,605,8,88,1,88,1,88,1,88,1,88,3,88,611,8,88,1,89,1,89,3,89,615,8,
89,1,89,1,89,1,90,4,90,620,8,90,11,90,12,90,621,1,91,1,91,4,91,626,8,
91,11,91,12,91,627,1,92,1,92,3,92,632,8,92,1,92,4,92,635,8,92,11,92,12,
92,636,1,93,1,93,1,93,5,93,642,8,93,10,93,12,93,645,9,93,1,93,1,93,1,
93,1,93,5,93,651,8,93,10,93,12,93,654,9,93,1,93,3,93,657,8,93,1,94,1,
94,1,94,1,94,1,94,5,94,664,8,94,10,94,12,94,667,9,94,1,94,1,94,1,94,1,
94,1,94,1,94,1,94,1,94,5,94,677,8,94,10,94,12,94,680,9,94,1,94,1,94,1,
94,3,94,685,8,94,1,95,1,95,3,95,689,8,95,1,96,3,96,692,8,96,1,97,3,97,
695,8,97,1,98,3,98,698,8,98,1,99,1,99,1,99,1,100,4,100,704,8,100,11,100,
12,100,705,1,101,1,101,5,101,710,8,101,10,101,12,101,713,9,101,1,102,
1,102,3,102,717,8,102,1,102,3,102,720,8,102,1,102,1,102,3,102,724,8,102,
1,103,3,103,727,8,103,1,104,1,104,3,104,731,8,104,4,560,573,665,678,0,
105,1,3,3,4,5,5,7,6,9,7,11,8,13,9,15,10,17,11,19,12,21,13,23,14,25,15,
27,16,29,17,31,18,33,19,35,20,37,21,39,22,41,23,43,24,45,25,47,26,49,
27,51,28,53,29,55,30,57,31,59,32,61,33,63,34,65,35,67,36,69,37,71,38,
73,39,75,40,77,41,79,42,81,43,83,44,85,45,87,46,89,47,91,48,93,49,95,
50,97,51,99,52,101,53,103,54,105,55,107,56,109,57,111,58,113,59,115,60,
117,61,119,62,121,63,123,64,125,65,127,66,129,67,131,68,133,69,135,70,
137,71,139,72,141,73,143,74,145,75,147,76,149,77,151,78,153,79,155,80,
157,0,159,0,161,0,163,0,165,0,167,0,169,0,171,0,173,0,175,0,177,0,179,
0,181,0,183,0,185,0,187,0,189,0,191,0,193,0,195,0,197,0,199,0,201,0,203,
0,205,0,207,0,209,0,1,0,25,6,0,70,70,82,82,85,85,102,102,114,114,117,
117,2,0,70,70,102,102,2,0,82,82,114,114,2,0,66,66,98,98,2,0,79,79,111,
111,2,0,88,88,120,120,2,0,74,74,106,106,4,0,10,10,12,13,39,39,92,92,4,
0,10,10,12,13,34,34,92,92,1,0,92,92,1,0,49,57,1,0,48,57,1,0,48,55,3,0,
48,57,65,70,97,102,1,0,48,49,2,0,69,69,101,101,2,0,43,43,45,45,5,0,0,
9,11,12,14,38,40,91,93,127,5,0,0,9,11,12,14,33,35,91,93,127,2,0,0,91,
93,127,1,0,0,127,2,0,9,9,32,32,2,0,10,10,12,13,295,0,65,90,95,95,97,122,
170,170,181,181,186,186,192,214,216,246,248,577,592,705,710,721,736,740,
750,750,890,890,902,902,904,906,908,908,910,929,931,974,976,1013,1015,
1153,1162,1230,1232,1273,1280,1295,1329,1366,1369,1369,1377,1415,1488,
1514,1520,1522,1569,1594,1600,1610,1646,1647,1649,1747,1749,1749,1765,
1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1901,1920,
1957,1969,1969,2308,2361,2365,2365,2384,2384,2392,2401,2429,2429,2437,
2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,
2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,
2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,
2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,
2768,2784,2785,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,
2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,
2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,
3001,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3168,3169,3205,
3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,
3297,3333,3340,3342,3344,3346,3368,3370,3385,3424,3425,3461,3478,3482,
3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,
3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,
3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,
3780,3782,3782,3804,3805,3840,3840,3904,3911,3913,3946,3976,3979,4096,
4129,4131,4135,4137,4138,4176,4181,4256,4293,4304,4346,4348,4348,4352,
4441,4447,4514,4520,4601,4608,4680,4682,4685,4688,4694,4696,4696,4698,
4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,
4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,
5740,5743,5750,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,
5937,5952,5969,5984,5996,5998,6000,6016,6067,6103,6103,6108,6108,6176,
6263,6272,6312,6400,6428,6480,6509,6512,6516,6528,6569,6593,6599,6656,
6678,7424,7615,7680,7835,7840,7929,7936,7957,7960,7965,7968,8005,8008,
8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,
8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,
8180,8182,8188,8305,8305,8319,8319,8336,8340,8450,8450,8455,8455,8458,
8467,8469,8469,8472,8477,8484,8484,8486,8486,8488,8488,8490,8497,8499,
8505,8508,8511,8517,8521,8544,8579,11264,11310,11312,11358,11392,11492,
11520,11557,11568,11621,11631,11631,11648,11670,11680,11686,11688,11694,
11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,
12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12443,12447,
12449,12538,12540,12543,12549,12588,12593,12686,12704,12727,12784,12799,
13312,19893,19968,40891,40960,42124,43008,43009,43011,43013,43015,43018,
43020,43042,44032,55203,63744,64045,64048,64106,64112,64217,64256,64262,
64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,
64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,
65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,
65474,65479,65482,65487,65490,65495,65498,65500,148,0,48,57,768,879,1155,
1158,1425,1465,1467,1469,1471,1471,1473,1474,1476,1477,1479,1479,1552,
1557,1611,1630,1632,1641,1648,1648,1750,1756,1759,1764,1767,1768,1770,
1773,1776,1785,1809,1809,1840,1866,1958,1968,2305,2307,2364,2364,2366,
2381,2385,2388,2402,2403,2406,2415,2433,2435,2492,2492,2494,2500,2503,
2504,2507,2509,2519,2519,2530,2531,2534,2543,2561,2563,2620,2620,2622,
2626,2631,2632,2635,2637,2662,2673,2689,2691,2748,2748,2750,2757,2759,
2761,2763,2765,2786,2787,2790,2799,2817,2819,2876,2876,2878,2883,2887,
2888,2891,2893,2902,2903,2918,2927,2946,2946,3006,3010,3014,3016,3018,
3021,3031,3031,3046,3055,3073,3075,3134,3140,3142,3144,3146,3149,3157,
3158,3174,3183,3202,3203,3260,3260,3262,3268,3270,3272,3274,3277,3285,
3286,3302,3311,3330,3331,3390,3395,3398,3400,3402,3405,3415,3415,3430,
3439,3458,3459,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3633,
3633,3636,3642,3655,3662,3664,3673,3761,3761,3764,3769,3771,3772,3784,
3789,3792,3801,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,
3903,3953,3972,3974,3975,3984,3991,3993,4028,4038,4038,4140,4146,4150,
4153,4160,4169,4182,4185,4959,4959,4969,4977,5906,5908,5938,5940,5970,
5971,6002,6003,6070,6099,6109,6109,6112,6121,6155,6157,6160,6169,6313,
6313,6432,6443,6448,6459,6470,6479,6576,6592,6600,6601,6608,6617,6679,
6683,7616,7619,8255,8256,8276,8276,8400,8412,8417,8417,8421,8427,12330,
12335,12441,12442,43010,43010,43014,43014,43019,43019,43043,43047,64286,
64286,65024,65039,65056,65059,65075,65076,65101,65103,65296,65305,65343,
65343,764,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,
0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,
1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,
0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,
0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,
1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,
0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,
0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,
1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,
0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0,
0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,
0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,
0,0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,
0,0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,
0,0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,
0,1,213,1,0,0,0,3,218,1,0,0,0,5,224,1,0,0,0,7,226,1,0,0,0,9,230,1,0,0,
0,11,237,1,0,0,0,13,240,1,0,0,0,15,245,1,0,0,0,17,250,1,0,0,0,19,256,
1,0,0,0,21,260,1,0,0,0,23,263,1,0,0,0,25,266,1,0,0,0,27,270,1,0,0,0,29,
274,1,0,0,0,31,279,1,0,0,0,33,284,1,0,0,0,35,290,1,0,0,0,37,299,1,0,0,
0,39,317,1,0,0,0,41,321,1,0,0,0,43,333,1,0,0,0,45,344,1,0,0,0,47,362,
1,0,0,0,49,364,1,0,0,0,51,371,1,0,0,0,53,378,1,0,0,0,55,387,1,0,0,0,57,
391,1,0,0,0,59,395,1,0,0,0,61,397,1,0,0,0,63,401,1,0,0,0,65,403,1,0,0,
0,67,406,1,0,0,0,69,409,1,0,0,0,71,411,1,0,0,0,73,413,1,0,0,0,75,415,
1,0,0,0,77,418,1,0,0,0,79,420,1,0,0,0,81,423,1,0,0,0,83,426,1,0,0,0,85,
428,1,0,0,0,87,430,1,0,0,0,89,432,1,0,0,0,91,435,1,0,0,0,93,438,1,0,0,
0,95,440,1,0,0,0,97,442,1,0,0,0,99,444,1,0,0,0,101,446,1,0,0,0,103,449,
1,0,0,0,105,451,1,0,0,0,107,454,1,0,0,0,109,457,1,0,0,0,111,459,1,0,0,
0,113,461,1,0,0,0,115,464,1,0,0,0,117,467,1,0,0,0,119,470,1,0,0,0,121,
473,1,0,0,0,123,476,1,0,0,0,125,478,1,0,0,0,127,481,1,0,0,0,129,484,1,
0,0,0,131,487,1,0,0,0,133,490,1,0,0,0,135,493,1,0,0,0,137,496,1,0,0,0,
139,499,1,0,0,0,141,502,1,0,0,0,143,505,1,0,0,0,145,508,1,0,0,0,147,512,
1,0,0,0,149,516,1,0,0,0,151,520,1,0,0,0,153,527,1,0,0,0,155,531,1,0,0,
0,157,551,1,0,0,0,159,579,1,0,0,0,161,583,1,0,0,0,163,585,1,0,0,0,165,
591,1,0,0,0,167,593,1,0,0,0,169,595,1,0,0,0,171,597,1,0,0,0,173,599,1,
0,0,0,175,601,1,0,0,0,177,610,1,0,0,0,179,614,1,0,0,0,181,619,1,0,0,0,
183,623,1,0,0,0,185,629,1,0,0,0,187,656,1,0,0,0,189,684,1,0,0,0,191,688,
1,0,0,0,193,691,1,0,0,0,195,694,1,0,0,0,197,697,1,0,0,0,199,699,1,0,0,
0,201,703,1,0,0,0,203,707,1,0,0,0,205,714,1,0,0,0,207,726,1,0,0,0,209,
730,1,0,0,0,211,214,3,43,21,0,212,214,3,45,22,0,213,211,1,0,0,0,213,212,
1,0,0,0,214,2,1,0,0,0,215,219,3,5,2,0,216,219,3,55,27,0,217,219,3,57,
28,0,218,215,1,0,0,0,218,216,1,0,0,0,218,217,1,0,0,0,219,4,1,0,0,0,220,
225,3,47,23,0,221,225,3,49,24,0,222,225,3,51,25,0,223,225,3,53,26,0,224,
220,1,0,0,0,224,221,1,0,0,0,224,222,1,0,0,0,224,223,1,0,0,0,225,6,1,0,
0,0,226,227,5,100,0,0,227,228,5,101,0,0,228,229,5,102,0,0,229,8,1,0,0,
0,230,231,5,114,0,0,231,232,5,101,0,0,232,233,5,116,0,0,233,234,5,117,
0,0,234,235,5,114,0,0,235,236,5,110,0,0,236,10,1,0,0,0,237,238,5,105,
0,0,238,239,5,102,0,0,239,12,1,0,0,0,240,241,5,101,0,0,241,242,5,108,
0,0,242,243,5,105,0,0,243,244,5,102,0,0,244,14,1,0,0,0,245,246,5,101,
0,0,246,247,5,108,0,0,247,248,5,115,0,0,248,249,5,101,0,0,249,16,1,0,
0,0,250,251,5,119,0,0,251,252,5,104,0,0,252,253,5,105,0,0,253,254,5,108,
0,0,254,255,5,101,0,0,255,18,1,0,0,0,256,257,5,102,0,0,257,258,5,111,
0,0,258,259,5,114,0,0,259,20,1,0,0,0,260,261,5,105,0,0,261,262,5,110,
0,0,262,22,1,0,0,0,263,264,5,111,0,0,264,265,5,114,0,0,265,24,1,0,0,0,
266,267,5,97,0,0,267,268,5,110,0,0,268,269,5,100,0,0,269,26,1,0,0,0,270,
271,5,110,0,0,271,272,5,111,0,0,272,273,5,116,0,0,273,28,1,0,0,0,274,
275,5,78,0,0,275,276,5,111,0,0,276,277,5,110,0,0,277,278,5,101,0,0,278,
30,1,0,0,0,279,280,5,84,0,0,280,281,5,114,0,0,281,282,5,117,0,0,282,283,
5,101,0,0,283,32,1,0,0,0,284,285,5,70,0,0,285,286,5,97,0,0,286,287,5,
108,0,0,287,288,5,115,0,0,288,289,5,101,0,0,289,34,1,0,0,0,290,291,5,
99,0,0,291,292,5,111,0,0,292,293,5,110,0,0,293,294,5,116,0,0,294,295,
5,105,0,0,295,296,5,110,0,0,296,297,5,117,0,0,297,298,5,101,0,0,298,36,
1,0,0,0,299,300,5,98,0,0,300,301,5,114,0,0,301,302,5,101,0,0,302,303,
5,97,0,0,303,304,5,107,0,0,304,38,1,0,0,0,305,306,4,19,0,0,306,318,3,
201,100,0,307,309,5,13,0,0,308,307,1,0,0,0,308,309,1,0,0,0,309,310,1,
0,0,0,310,313,5,10,0,0,311,313,2,12,13,0,312,308,1,0,0,0,312,311,1,0,
0,0,313,315,1,0,0,0,314,316,3,201,100,0,315,314,1,0,0,0,315,316,1,0,0,
0,316,318,1,0,0,0,317,305,1,0,0,0,317,312,1,0,0,0,318,319,1,0,0,0,319,
320,6,19,0,0,320,40,1,0,0,0,321,325,3,207,103,0,322,324,3,209,104,0,323,
322,1,0,0,0,324,327,1,0,0,0,325,323,1,0,0,0,325,326,1,0,0,0,326,42,1,
0,0,0,327,325,1,0,0,0,328,334,7,0,0,0,329,330,7,1,0,0,330,334,7,2,0,0,
331,332,7,2,0,0,332,334,7,1,0,0,333,328,1,0,0,0,333,329,1,0,0,0,333,331,
1,0,0,0,333,334,1,0,0,0,334,337,1,0,0,0,335,338,3,157,78,0,336,338,3,
159,79,0,337,335,1,0,0,0,337,336,1,0,0,0,338,44,1,0,0,0,339,345,7,3,0,
0,340,341,7,3,0,0,341,345,7,2,0,0,342,343,7,2,0,0,343,345,7,3,0,0,344,
339,1,0,0,0,344,340,1,0,0,0,344,342,1,0,0,0,345,348,1,0,0,0,346,349,3,
187,93,0,347,349,3,189,94,0,348,346,1,0,0,0,348,347,1,0,0,0,349,46,1,
0,0,0,350,354,3,167,83,0,351,353,3,169,84,0,352,351,1,0,0,0,353,356,1,
0,0,0,354,352,1,0,0,0,354,355,1,0,0,0,355,363,1,0,0,0,356,354,1,0,0,0,
357,359,5,48,0,0,358,357,1,0,0,0,359,360,1,0,0,0,360,358,1,0,0,0,360,
361,1,0,0,0,361,363,1,0,0,0,362,350,1,0,0,0,362,358,1,0,0,0,363,48,1,
0,0,0,364,365,5,48,0,0,365,367,7,4,0,0,366,368,3,171,85,0,367,366,1,0,
0,0,368,369,1,0,0,0,369,367,1,0,0,0,369,370,1,0,0,0,370,50,1,0,0,0,371,
372,5,48,0,0,372,374,7,5,0,0,373,375,3,173,86,0,374,373,1,0,0,0,375,376,
1,0,0,0,376,374,1,0,0,0,376,377,1,0,0,0,377,52,1,0,0,0,378,379,5,48,0,
0,379,381,7,3,0,0,380,382,3,175,87,0,381,380,1,0,0,0,382,383,1,0,0,0,
383,381,1,0,0,0,383,384,1,0,0,0,384,54,1,0,0,0,385,388,3,177,88,0,386,
388,3,179,89,0,387,385,1,0,0,0,387,386,1,0,0,0,388,56,1,0,0,0,389,392,
3,55,27,0,390,392,3,181,90,0,391,389,1,0,0,0,391,390,1,0,0,0,392,393,
1,0,0,0,393,394,7,6,0,0,394,58,1,0,0,0,395,396,5,46,0,0,396,60,1,0,0,
0,397,398,5,46,0,0,398,399,5,46,0,0,399,400,5,46,0,0,400,62,1,0,0,0,401,
402,5,42,0,0,402,64,1,0,0,0,403,404,5,40,0,0,404,405,6,32,1,0,405,66,
1,0,0,0,406,407,5,41,0,0,407,408,6,33,2,0,408,68,1,0,0,0,409,410,5,44,
0,0,410,70,1,0,0,0,411,412,5,58,0,0,412,72,1,0,0,0,413,414,5,59,0,0,414,
74,1,0,0,0,415,416,5,42,0,0,416,417,5,42,0,0,417,76,1,0,0,0,418,419,5,
61,0,0,419,78,1,0,0,0,420,421,5,91,0,0,421,422,6,39,3,0,422,80,1,0,0,
0,423,424,5,93,0,0,424,425,6,40,4,0,425,82,1,0,0,0,426,427,5,124,0,0,
427,84,1,0,0,0,428,429,5,94,0,0,429,86,1,0,0,0,430,431,5,38,0,0,431,88,
1,0,0,0,432,433,5,60,0,0,433,434,5,60,0,0,434,90,1,0,0,0,435,436,5,62,
0,0,436,437,5,62,0,0,437,92,1,0,0,0,438,439,5,43,0,0,439,94,1,0,0,0,440,
441,5,45,0,0,441,96,1,0,0,0,442,443,5,47,0,0,443,98,1,0,0,0,444,445,5,
37,0,0,445,100,1,0,0,0,446,447,5,47,0,0,447,448,5,47,0,0,448,102,1,0,
0,0,449,450,5,126,0,0,450,104,1,0,0,0,451,452,5,123,0,0,452,453,6,52,
5,0,453,106,1,0,0,0,454,455,5,125,0,0,455,456,6,53,6,0,456,108,1,0,0,
0,457,458,5,60,0,0,458,110,1,0,0,0,459,460,5,62,0,0,460,112,1,0,0,0,461,
462,5,61,0,0,462,463,5,61,0,0,463,114,1,0,0,0,464,465,5,62,0,0,465,466,
5,61,0,0,466,116,1,0,0,0,467,468,5,60,0,0,468,469,5,61,0,0,469,118,1,
0,0,0,470,471,5,60,0,0,471,472,5,62,0,0,472,120,1,0,0,0,473,474,5,33,
0,0,474,475,5,61,0,0,475,122,1,0,0,0,476,477,5,64,0,0,477,124,1,0,0,0,
478,479,5,45,0,0,479,480,5,62,0,0,480,126,1,0,0,0,481,482,5,43,0,0,482,
483,5,61,0,0,483,128,1,0,0,0,484,485,5,45,0,0,485,486,5,61,0,0,486,130,
1,0,0,0,487,488,5,42,0,0,488,489,5,61,0,0,489,132,1,0,0,0,490,491,5,64,
0,0,491,492,5,61,0,0,492,134,1,0,0,0,493,494,5,47,0,0,494,495,5,61,0,
0,495,136,1,0,0,0,496,497,5,37,0,0,497,498,5,61,0,0,498,138,1,0,0,0,499,
500,5,38,0,0,500,501,5,61,0,0,501,140,1,0,0,0,502,503,5,124,0,0,503,504,
5,61,0,0,504,142,1,0,0,0,505,506,5,94,0,0,506,507,5,61,0,0,507,144,1,
0,0,0,508,509,5,60,0,0,509,510,5,60,0,0,510,511,5,61,0,0,511,146,1,0,
0,0,512,513,5,62,0,0,513,514,5,62,0,0,514,515,5,61,0,0,515,148,1,0,0,
0,516,517,5,42,0,0,517,518,5,42,0,0,518,519,5,61,0,0,519,150,1,0,0,0,
520,521,5,47,0,0,521,522,5,47,0,0,522,523,5,61,0,0,523,152,1,0,0,0,524,
528,3,201,100,0,525,528,3,203,101,0,526,528,3,205,102,0,527,524,1,0,0,
0,527,525,1,0,0,0,527,526,1,0,0,0,528,529,1,0,0,0,529,530,6,76,7,0,530,
154,1,0,0,0,531,532,9,0,0,0,532,156,1,0,0,0,533,538,5,39,0,0,534,537,
3,165,82,0,535,537,8,7,0,0,536,534,1,0,0,0,536,535,1,0,0,0,537,540,1,
0,0,0,538,536,1,0,0,0,538,539,1,0,0,0,539,541,1,0,0,0,540,538,1,0,0,0,
541,552,5,39,0,0,542,547,5,34,0,0,543,546,3,165,82,0,544,546,8,8,0,0,
545,543,1,0,0,0,545,544,1,0,0,0,546,549,1,0,0,0,547,545,1,0,0,0,547,548,
1,0,0,0,548,550,1,0,0,0,549,547,1,0,0,0,550,552,5,34,0,0,551,533,1,0,
0,0,551,542,1,0,0,0,552,158,1,0,0,0,553,554,5,39,0,0,554,555,5,39,0,0,
555,556,5,39,0,0,556,560,1,0,0,0,557,559,3,161,80,0,558,557,1,0,0,0,559,
562,1,0,0,0,560,561,1,0,0,0,560,558,1,0,0,0,561,563,1,0,0,0,562,560,1,
0,0,0,563,564,5,39,0,0,564,565,5,39,0,0,565,580,5,39,0,0,566,567,5,34,
0,0,567,568,5,34,0,0,568,569,5,34,0,0,569,573,1,0,0,0,570,572,3,161,80,
0,571,570,1,0,0,0,572,575,1,0,0,0,573,574,1,0,0,0,573,571,1,0,0,0,574,
576,1,0,0,0,575,573,1,0,0,0,576,577,5,34,0,0,577,578,5,34,0,0,578,580,
5,34,0,0,579,553,1,0,0,0,579,566,1,0,0,0,580,160,1,0,0,0,581,584,3,163,
81,0,582,584,3,165,82,0,583,581,1,0,0,0,583,582,1,0,0,0,584,162,1,0,0,
0,585,586,8,9,0,0,586,164,1,0,0,0,587,588,5,92,0,0,588,592,9,0,0,0,589,
590,5,92,0,0,590,592,3,39,19,0,591,587,1,0,0,0,591,589,1,0,0,0,592,166,
1,0,0,0,593,594,7,10,0,0,594,168,1,0,0,0,595,596,7,11,0,0,596,170,1,0,
0,0,597,598,7,12,0,0,598,172,1,0,0,0,599,600,7,13,0,0,600,174,1,0,0,0,
601,602,7,14,0,0,602,176,1,0,0,0,603,605,3,181,90,0,604,603,1,0,0,0,604,
605,1,0,0,0,605,606,1,0,0,0,606,611,3,183,91,0,607,608,3,181,90,0,608,
609,5,46,0,0,609,611,1,0,0,0,610,604,1,0,0,0,610,607,1,0,0,0,611,178,
1,0,0,0,612,615,3,181,90,0,613,615,3,177,88,0,614,612,1,0,0,0,614,613,
1,0,0,0,615,616,1,0,0,0,616,617,3,185,92,0,617,180,1,0,0,0,618,620,3,
169,84,0,619,618,1,0,0,0,620,621,1,0,0,0,621,619,1,0,0,0,621,622,1,0,
0,0,622,182,1,0,0,0,623,625,5,46,0,0,624,626,3,169,84,0,625,624,1,0,0,
0,626,627,1,0,0,0,627,625,1,0,0,0,627,628,1,0,0,0,628,184,1,0,0,0,629,
631,7,15,0,0,630,632,7,16,0,0,631,630,1,0,0,0,631,632,1,0,0,0,632,634,
1,0,0,0,633,635,3,169,84,0,634,633,1,0,0,0,635,636,1,0,0,0,636,634,1,
0,0,0,636,637,1,0,0,0,637,186,1,0,0,0,638,643,5,39,0,0,639,642,3,193,
96,0,640,642,3,199,99,0,641,639,1,0,0,0,641,640,1,0,0,0,642,645,1,0,0,
0,643,641,1,0,0,0,643,644,1,0,0,0,644,646,1,0,0,0,645,643,1,0,0,0,646,
657,5,39,0,0,647,652,5,34,0,0,648,651,3,195,97,0,649,651,3,199,99,0,650,
648,1,0,0,0,650,649,1,0,0,0,651,654,1,0,0,0,652,650,1,0,0,0,652,653,1,
0,0,0,653,655,1,0,0,0,654,652,1,0,0,0,655,657,5,34,0,0,656,638,1,0,0,
0,656,647,1,0,0,0,657,188,1,0,0,0,658,659,5,39,0,0,659,660,5,39,0,0,660,
661,5,39,0,0,661,665,1,0,0,0,662,664,3,191,95,0,663,662,1,0,0,0,664,667,
1,0,0,0,665,666,1,0,0,0,665,663,1,0,0,0,666,668,1,0,0,0,667,665,1,0,0,
0,668,669,5,39,0,0,669,670,5,39,0,0,670,685,5,39,0,0,671,672,5,34,0,0,
672,673,5,34,0,0,673,674,5,34,0,0,674,678,1,0,0,0,675,677,3,191,95,0,
676,675,1,0,0,0,677,680,1,0,0,0,678,679,1,0,0,0,678,676,1,0,0,0,679,681,
1,0,0,0,680,678,1,0,0,0,681,682,5,34,0,0,682,683,5,34,0,0,683,685,5,34,
0,0,684,658,1,0,0,0,684,671,1,0,0,0,685,190,1,0,0,0,686,689,3,197,98,
0,687,689,3,199,99,0,688,686,1,0,0,0,688,687,1,0,0,0,689,192,1,0,0,0,
690,692,7,17,0,0,691,690,1,0,0,0,692,194,1,0,0,0,693,695,7,18,0,0,694,
693,1,0,0,0,695,196,1,0,0,0,696,698,7,19,0,0,697,696,1,0,0,0,698,198,
1,0,0,0,699,700,5,92,0,0,700,701,7,20,0,0,701,200,1,0,0,0,702,704,7,21,
0,0,703,702,1,0,0,0,704,705,1,0,0,0,705,703,1,0,0,0,705,706,1,0,0,0,706,
202,1,0,0,0,707,711,5,35,0,0,708,710,8,22,0,0,709,708,1,0,0,0,710,713,
1,0,0,0,711,709,1,0,0,0,711,712,1,0,0,0,712,204,1,0,0,0,713,711,1,0,0,
0,714,716,5,92,0,0,715,717,3,201,100,0,716,715,1,0,0,0,716,717,1,0,0,
0,717,723,1,0,0,0,718,720,5,13,0,0,719,718,1,0,0,0,719,720,1,0,0,0,720,
721,1,0,0,0,721,724,5,10,0,0,722,724,2,12,13,0,723,719,1,0,0,0,723,722,
1,0,0,0,724,206,1,0,0,0,725,727,7,23,0,0,726,725,1,0,0,0,727,208,1,0,
0,0,728,731,3,207,103,0,729,731,7,24,0,0,730,728,1,0,0,0,730,729,1,0,
0,0,731,210,1,0,0,0,58,0,213,218,224,308,312,315,317,325,333,337,344,
348,354,360,362,369,376,383,387,391,527,536,538,545,547,551,560,573,579,
583,591,604,610,614,621,627,631,636,641,643,650,652,656,665,678,684,688,
691,694,697,705,711,716,719,723,726,730,8,1,19,0,1,32,1,1,33,2,1,39,3,
1,40,4,1,52,5,1,53,6,6,0,0
};
staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0]));
antlr4::atn::ATNDeserializer deserializer;
staticData->atn = deserializer.deserialize(staticData->serializedATN);
const size_t count = staticData->atn->getNumberOfDecisions();
staticData->decisionToDFA.reserve(count);
for (size_t i = 0; i < count; i++) {
staticData->decisionToDFA.emplace_back(staticData->atn->getDecisionState(i), i);
}
python3lexerLexerStaticData = staticData.release();
}
}
Python3Lexer::Python3Lexer(CharStream *input) : Lexer(input) {
Python3Lexer::initialize();
_interpreter = new atn::LexerATNSimulator(this, *python3lexerLexerStaticData->atn, python3lexerLexerStaticData->decisionToDFA, python3lexerLexerStaticData->sharedContextCache);
}
Python3Lexer::~Python3Lexer() {
delete _interpreter;
}
std::string Python3Lexer::getGrammarFileName() const {
return "Python3Lexer.g4";
}
const std::vector<std::string>& Python3Lexer::getRuleNames() const {
return python3lexerLexerStaticData->ruleNames;
}
const std::vector<std::string>& Python3Lexer::getChannelNames() const {
return python3lexerLexerStaticData->channelNames;
}
const std::vector<std::string>& Python3Lexer::getModeNames() const {
return python3lexerLexerStaticData->modeNames;
}
const dfa::Vocabulary& Python3Lexer::getVocabulary() const {
return python3lexerLexerStaticData->vocabulary;
}
antlr4::atn::SerializedATNView Python3Lexer::getSerializedATN() const {
return python3lexerLexerStaticData->serializedATN;
}
const atn::ATN& Python3Lexer::getATN() const {
return *python3lexerLexerStaticData->atn;
}
void Python3Lexer::action(RuleContext *context, size_t ruleIndex, size_t actionIndex) {
switch (ruleIndex) {
case 19: NEWLINEAction(antlrcpp::downCast<antlr4::RuleContext *>(context), actionIndex); break;
case 32: OPEN_PARENAction(antlrcpp::downCast<antlr4::RuleContext *>(context), actionIndex); break;
case 33: CLOSE_PARENAction(antlrcpp::downCast<antlr4::RuleContext *>(context), actionIndex); break;
case 39: OPEN_BRACKAction(antlrcpp::downCast<antlr4::RuleContext *>(context), actionIndex); break;
case 40: CLOSE_BRACKAction(antlrcpp::downCast<antlr4::RuleContext *>(context), actionIndex); break;
case 52: OPEN_BRACEAction(antlrcpp::downCast<antlr4::RuleContext *>(context), actionIndex); break;
case 53: CLOSE_BRACEAction(antlrcpp::downCast<antlr4::RuleContext *>(context), actionIndex); break;
default:
break;
}
}
bool Python3Lexer::sempred(RuleContext *context, size_t ruleIndex, size_t predicateIndex) {
switch (ruleIndex) {
case 19: return NEWLINESempred(antlrcpp::downCast<antlr4::RuleContext *>(context), predicateIndex);
default:
break;
}
return true;
}
void Python3Lexer::NEWLINEAction(antlr4::RuleContext *context, size_t actionIndex) {
switch (actionIndex) {
case 0:
{
std::string pattern1="[^\r\n\f]+";
std::string pattern2="[\r\n\f]+";
std::regex re1(pattern1);
std::regex re2(pattern2);
std::string fmt="";
std::string newLine=regex_replace(getText(),re1,fmt);
std::string spaces = regex_replace(getText(),re2,fmt);
int next = _input->LA(1);
if (opened > 0 || next == '\r' || next == '\n' || next == '\f' || next == '#') {
// If we're inside a list or on a blank line, ignore all indents,
// dedents and line breaks.
skip();
}
else {
emit(commonToken(NEWLINE, newLine));
int indent = getIndentationCount(spaces);
int previous = indents.empty() ? 0 : indents.top();
if (indent == previous) {
// skip indents of the same size as the present indent-size
skip();
}
else if (indent > previous) {
indents.push(indent);
emit(commonToken(Python3Lexer::INDENT, spaces));
}
else {
// Possibly emit more than 1 DEDENT token.
while(!indents.empty() && indents.top() > indent) {
this->emit(createDedent());
indents.pop();
}
}
}
}
break;
default:
break;
}
}
void Python3Lexer::OPEN_PARENAction(antlr4::RuleContext *context, size_t actionIndex) {
switch (actionIndex) {
case 1: opened++; break;
default:
break;
}
}
void Python3Lexer::CLOSE_PARENAction(antlr4::RuleContext *context, size_t actionIndex) {
switch (actionIndex) {
case 2: opened--; break;
default:
break;
}
}
void Python3Lexer::OPEN_BRACKAction(antlr4::RuleContext *context, size_t actionIndex) {
switch (actionIndex) {
case 3: opened++; break;
default:
break;
}
}
void Python3Lexer::CLOSE_BRACKAction(antlr4::RuleContext *context, size_t actionIndex) {
switch (actionIndex) {
case 4: opened--; break;
default:
break;
}
}
void Python3Lexer::OPEN_BRACEAction(antlr4::RuleContext *context, size_t actionIndex) {
switch (actionIndex) {
case 5: opened++; break;
default:
break;
}
}
void Python3Lexer::CLOSE_BRACEAction(antlr4::RuleContext *context, size_t actionIndex) {
switch (actionIndex) {
case 6: opened--; break;
default:
break;
}
}
bool Python3Lexer::NEWLINESempred(antlr4::RuleContext *_localctx, size_t predicateIndex) {
switch (predicateIndex) {
case 0: return atStartOfInput();
default:
break;
}
return true;
}
void Python3Lexer::initialize() {
#if ANTLR4_USE_THREAD_LOCAL_CACHE
python3lexerLexerInitialize();
#else
::antlr4::internal::call_once(python3lexerLexerOnceFlag, python3lexerLexerInitialize);
#endif
}

186
generated/Python3Lexer.h Normal file
View File

@ -0,0 +1,186 @@
#include <list>
#include <regex>
// Generated from Python3Lexer.g4 by ANTLR 4.13.1
#pragma once
#include "antlr4-runtime.h"
class Python3Lexer : public antlr4::Lexer {
public:
enum {
INDENT = 1, DEDENT = 2, STRING = 3, NUMBER = 4, INTEGER = 5, DEF = 6,
RETURN = 7, IF = 8, ELIF = 9, ELSE = 10, WHILE = 11, FOR = 12, IN = 13,
OR = 14, AND = 15, NOT = 16, NONE = 17, TRUE = 18, FALSE = 19, CONTINUE = 20,
BREAK = 21, NEWLINE = 22, NAME = 23, STRING_LITERAL = 24, BYTES_LITERAL = 25,
DECIMAL_INTEGER = 26, OCT_INTEGER = 27, HEX_INTEGER = 28, BIN_INTEGER = 29,
FLOAT_NUMBER = 30, IMAG_NUMBER = 31, DOT = 32, ELLIPSIS = 33, STAR = 34,
OPEN_PAREN = 35, CLOSE_PAREN = 36, COMMA = 37, COLON = 38, SEMI_COLON = 39,
POWER = 40, ASSIGN = 41, OPEN_BRACK = 42, CLOSE_BRACK = 43, OR_OP = 44,
XOR = 45, AND_OP = 46, LEFT_SHIFT = 47, RIGHT_SHIFT = 48, ADD = 49,
MINUS = 50, DIV = 51, MOD = 52, IDIV = 53, NOT_OP = 54, OPEN_BRACE = 55,
CLOSE_BRACE = 56, LESS_THAN = 57, GREATER_THAN = 58, EQUALS = 59, GT_EQ = 60,
LT_EQ = 61, NOT_EQ_1 = 62, NOT_EQ_2 = 63, AT = 64, ARROW = 65, ADD_ASSIGN = 66,
SUB_ASSIGN = 67, MULT_ASSIGN = 68, AT_ASSIGN = 69, DIV_ASSIGN = 70,
MOD_ASSIGN = 71, AND_ASSIGN = 72, OR_ASSIGN = 73, XOR_ASSIGN = 74, LEFT_SHIFT_ASSIGN = 75,
RIGHT_SHIFT_ASSIGN = 76, POWER_ASSIGN = 77, IDIV_ASSIGN = 78, SKIP_ = 79,
UNKNOWN_CHAR = 80
};
explicit Python3Lexer(antlr4::CharStream *input);
~Python3Lexer() override;
// A queue where extra tokens are pushed on (see the NEWLINE lexer rule).
private: std::list<antlr4::Token*> tokens ;
// The stack that keeps track of the indentation level.
private: std::stack<int> indents ;
// The amount of opened braces, brackets and parenthesis.
private: int opened = 0;
// The most recently produced token.
private: antlr4::Token* lastToken = nullptr;
public: void emit(std::unique_ptr<antlr4::Token> t) override {
token.release();
token=std::move(t);
tokens.push_back(token.get());
// std::cout<<t->toString()<<std::endl;
}
public: std::unique_ptr<antlr4::Token> nextToken() override {
// Check if the end-of-file is ahead and there are still some DEDENTS expected.
if (_input->LA(1) == EOF && !this->indents.empty()) {
// Remove any trailing EOF tokens from our buffer.
for(auto i=tokens.rbegin();i!=tokens.rend();){
auto tmp=i;
i++;
if((*tmp)->getType()==EOF){
tokens.erase(tmp.base());
}
}
// First emit an extra line break that serves as the end of the statement.
std::unique_ptr<antlr4::Token> tmp=commonToken(Python3Lexer::NEWLINE, "\n");
this->emit(std::move(tmp));
// Now emit as much DEDENT tokens as needed.
while (!indents.empty()) {
auto tmp=createDedent();
this->emit(std::move(tmp));
indents.pop();
}
// Put the EOF back on the token stream.
this->emit(commonToken(static_cast<int>(Python3Lexer::EOF), "<EOF>"));
}
std::unique_ptr<antlr4::Token> next = Lexer::nextToken();
if (next->getChannel() == antlr4::Token::DEFAULT_CHANNEL) {
// Keep track of the last token on the default channel.
this->lastToken = next.get();
}
if (tokens.empty()) {
return std::move(next);
} else{
next.release();
auto tmp=tokens.front();
tokens.pop_front();
return std::unique_ptr<antlr4::Token>(tmp);
}
}
private: std::unique_ptr<antlr4::Token> createDedent() {
auto dedent = commonToken(Python3Lexer::DEDENT, "");
dedent->setLine(this->lastToken->getLine());
return std::move(dedent);
}
private: std::unique_ptr<antlr4::CommonToken> commonToken(int type,std::string text) {
int stop = this->getCharIndex() - 1;
int start = text.empty() ? stop : stop - text.length() + 1;
return std::move(std::unique_ptr<antlr4::CommonToken>(new antlr4::CommonToken({ this, _input },
type,
DEFAULT_TOKEN_CHANNEL, start, stop)));
}
// Calculates the indentation of the provided spaces, taking the
// following rules into account:
//
// "Tabs are replaced (from left to right) by one to eight spaces
// such that the total number of characters up to and including
// the replacement is a multiple of eight [...]"
//
// -- https://docs.python.org/3.1/reference/lexical_analysis.html#indentation
static int getIndentationCount(std::string spaces) {
int count = 0;
for (char ch : spaces) {
switch (ch) {
case '\t':
count += 8 - (count % 8);
break;
default:
// A normal space char.
count++;
}
}
return count;
}
bool atStartOfInput() {
return Lexer::getCharPositionInLine() == 0 && Lexer::getLine() == 1;
}
std::string getGrammarFileName() const override;
const std::vector<std::string>& getRuleNames() const override;
const std::vector<std::string>& getChannelNames() const override;
const std::vector<std::string>& getModeNames() const override;
const antlr4::dfa::Vocabulary& getVocabulary() const override;
antlr4::atn::SerializedATNView getSerializedATN() const override;
const antlr4::atn::ATN& getATN() const override;
void action(antlr4::RuleContext *context, size_t ruleIndex, size_t actionIndex) override;
bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override;
// By default the static state used to implement the lexer is lazily initialized during the first
// call to the constructor. You can call this function if you wish to initialize the static state
// ahead of time.
static void initialize();
private:
// Individual action functions triggered by action() above.
void NEWLINEAction(antlr4::RuleContext *context, size_t actionIndex);
void OPEN_PARENAction(antlr4::RuleContext *context, size_t actionIndex);
void CLOSE_PARENAction(antlr4::RuleContext *context, size_t actionIndex);
void OPEN_BRACKAction(antlr4::RuleContext *context, size_t actionIndex);
void CLOSE_BRACKAction(antlr4::RuleContext *context, size_t actionIndex);
void OPEN_BRACEAction(antlr4::RuleContext *context, size_t actionIndex);
void CLOSE_BRACEAction(antlr4::RuleContext *context, size_t actionIndex);
// Individual semantic predicate functions triggered by sempred() above.
bool NEWLINESempred(antlr4::RuleContext *_localctx, size_t predicateIndex);
};

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,143 @@
INDENT=1
DEDENT=2
STRING=3
NUMBER=4
INTEGER=5
DEF=6
RETURN=7
IF=8
ELIF=9
ELSE=10
WHILE=11
FOR=12
IN=13
OR=14
AND=15
NOT=16
NONE=17
TRUE=18
FALSE=19
CONTINUE=20
BREAK=21
NEWLINE=22
NAME=23
STRING_LITERAL=24
BYTES_LITERAL=25
DECIMAL_INTEGER=26
OCT_INTEGER=27
HEX_INTEGER=28
BIN_INTEGER=29
FLOAT_NUMBER=30
IMAG_NUMBER=31
DOT=32
ELLIPSIS=33
STAR=34
OPEN_PAREN=35
CLOSE_PAREN=36
COMMA=37
COLON=38
SEMI_COLON=39
POWER=40
ASSIGN=41
OPEN_BRACK=42
CLOSE_BRACK=43
OR_OP=44
XOR=45
AND_OP=46
LEFT_SHIFT=47
RIGHT_SHIFT=48
ADD=49
MINUS=50
DIV=51
MOD=52
IDIV=53
NOT_OP=54
OPEN_BRACE=55
CLOSE_BRACE=56
LESS_THAN=57
GREATER_THAN=58
EQUALS=59
GT_EQ=60
LT_EQ=61
NOT_EQ_1=62
NOT_EQ_2=63
AT=64
ARROW=65
ADD_ASSIGN=66
SUB_ASSIGN=67
MULT_ASSIGN=68
AT_ASSIGN=69
DIV_ASSIGN=70
MOD_ASSIGN=71
AND_ASSIGN=72
OR_ASSIGN=73
XOR_ASSIGN=74
LEFT_SHIFT_ASSIGN=75
RIGHT_SHIFT_ASSIGN=76
POWER_ASSIGN=77
IDIV_ASSIGN=78
SKIP_=79
UNKNOWN_CHAR=80
'def'=6
'return'=7
'if'=8
'elif'=9
'else'=10
'while'=11
'for'=12
'in'=13
'or'=14
'and'=15
'not'=16
'None'=17
'True'=18
'False'=19
'continue'=20
'break'=21
'.'=32
'...'=33
'*'=34
'('=35
')'=36
','=37
':'=38
';'=39
'**'=40
'='=41
'['=42
']'=43
'|'=44
'^'=45
'&'=46
'<<'=47
'>>'=48
'+'=49
'-'=50
'/'=51
'%'=52
'//'=53
'~'=54
'{'=55
'}'=56
'<'=57
'>'=58
'=='=59
'>='=60
'<='=61
'<>'=62
'!='=63
'@'=64
'->'=65
'+='=66
'-='=67
'*='=68
'@='=69
'/='=70
'%='=71
'&='=72
'|='=73
'^='=74
'<<='=75
'>>='=76
'**='=77
'//='=78

3012
generated/Python3Parser.cpp Normal file

File diff suppressed because it is too large Load Diff

661
generated/Python3Parser.h Normal file
View File

@ -0,0 +1,661 @@
// Generated from Python3Parser.g4 by ANTLR 4.13.1
#pragma once
#include "antlr4-runtime.h"
class Python3Parser : public antlr4::Parser {
public:
enum {
INDENT = 1, DEDENT = 2, STRING = 3, NUMBER = 4, INTEGER = 5, DEF = 6,
RETURN = 7, IF = 8, ELIF = 9, ELSE = 10, WHILE = 11, FOR = 12, IN = 13,
OR = 14, AND = 15, NOT = 16, NONE = 17, TRUE = 18, FALSE = 19, CONTINUE = 20,
BREAK = 21, NEWLINE = 22, NAME = 23, STRING_LITERAL = 24, BYTES_LITERAL = 25,
DECIMAL_INTEGER = 26, OCT_INTEGER = 27, HEX_INTEGER = 28, BIN_INTEGER = 29,
FLOAT_NUMBER = 30, IMAG_NUMBER = 31, DOT = 32, ELLIPSIS = 33, STAR = 34,
OPEN_PAREN = 35, CLOSE_PAREN = 36, COMMA = 37, COLON = 38, SEMI_COLON = 39,
POWER = 40, ASSIGN = 41, OPEN_BRACK = 42, CLOSE_BRACK = 43, OR_OP = 44,
XOR = 45, AND_OP = 46, LEFT_SHIFT = 47, RIGHT_SHIFT = 48, ADD = 49,
MINUS = 50, DIV = 51, MOD = 52, IDIV = 53, NOT_OP = 54, OPEN_BRACE = 55,
CLOSE_BRACE = 56, LESS_THAN = 57, GREATER_THAN = 58, EQUALS = 59, GT_EQ = 60,
LT_EQ = 61, NOT_EQ_1 = 62, NOT_EQ_2 = 63, AT = 64, ARROW = 65, ADD_ASSIGN = 66,
SUB_ASSIGN = 67, MULT_ASSIGN = 68, AT_ASSIGN = 69, DIV_ASSIGN = 70,
MOD_ASSIGN = 71, AND_ASSIGN = 72, OR_ASSIGN = 73, XOR_ASSIGN = 74, LEFT_SHIFT_ASSIGN = 75,
RIGHT_SHIFT_ASSIGN = 76, POWER_ASSIGN = 77, IDIV_ASSIGN = 78, SKIP_ = 79,
UNKNOWN_CHAR = 80
};
enum {
RuleFile_input = 0, RuleFuncdef = 1, RuleParameters = 2, RuleTypedargslist = 3,
RuleTfpdef = 4, RuleStmt = 5, RuleSimple_stmt = 6, RuleSmall_stmt = 7,
RuleExpr_stmt = 8, RuleAugassign = 9, RuleFlow_stmt = 10, RuleBreak_stmt = 11,
RuleContinue_stmt = 12, RuleReturn_stmt = 13, RuleCompound_stmt = 14,
RuleIf_stmt = 15, RuleWhile_stmt = 16, RuleSuite = 17, RuleTest = 18,
RuleOr_test = 19, RuleAnd_test = 20, RuleNot_test = 21, RuleComparison = 22,
RuleComp_op = 23, RuleArith_expr = 24, RuleAddorsub_op = 25, RuleTerm = 26,
RuleMuldivmod_op = 27, RuleFactor = 28, RuleAtom_expr = 29, RuleTrailer = 30,
RuleAtom = 31, RuleTestlist = 32, RuleArglist = 33, RuleArgument = 34
};
explicit Python3Parser(antlr4::TokenStream *input);
Python3Parser(antlr4::TokenStream *input, const antlr4::atn::ParserATNSimulatorOptions &options);
~Python3Parser() override;
std::string getGrammarFileName() const override;
const antlr4::atn::ATN& getATN() const override;
const std::vector<std::string>& getRuleNames() const override;
const antlr4::dfa::Vocabulary& getVocabulary() const override;
antlr4::atn::SerializedATNView getSerializedATN() const override;
class File_inputContext;
class FuncdefContext;
class ParametersContext;
class TypedargslistContext;
class TfpdefContext;
class StmtContext;
class Simple_stmtContext;
class Small_stmtContext;
class Expr_stmtContext;
class AugassignContext;
class Flow_stmtContext;
class Break_stmtContext;
class Continue_stmtContext;
class Return_stmtContext;
class Compound_stmtContext;
class If_stmtContext;
class While_stmtContext;
class SuiteContext;
class TestContext;
class Or_testContext;
class And_testContext;
class Not_testContext;
class ComparisonContext;
class Comp_opContext;
class Arith_exprContext;
class Addorsub_opContext;
class TermContext;
class Muldivmod_opContext;
class FactorContext;
class Atom_exprContext;
class TrailerContext;
class AtomContext;
class TestlistContext;
class ArglistContext;
class ArgumentContext;
class File_inputContext : public antlr4::ParserRuleContext {
public:
File_inputContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *EOF();
std::vector<antlr4::tree::TerminalNode *> NEWLINE();
antlr4::tree::TerminalNode* NEWLINE(size_t i);
std::vector<StmtContext *> stmt();
StmtContext* stmt(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
File_inputContext* file_input();
class FuncdefContext : public antlr4::ParserRuleContext {
public:
FuncdefContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *DEF();
antlr4::tree::TerminalNode *NAME();
ParametersContext *parameters();
antlr4::tree::TerminalNode *COLON();
SuiteContext *suite();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
FuncdefContext* funcdef();
class ParametersContext : public antlr4::ParserRuleContext {
public:
ParametersContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *OPEN_PAREN();
antlr4::tree::TerminalNode *CLOSE_PAREN();
TypedargslistContext *typedargslist();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
ParametersContext* parameters();
class TypedargslistContext : public antlr4::ParserRuleContext {
public:
TypedargslistContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
std::vector<TfpdefContext *> tfpdef();
TfpdefContext* tfpdef(size_t i);
std::vector<antlr4::tree::TerminalNode *> ASSIGN();
antlr4::tree::TerminalNode* ASSIGN(size_t i);
std::vector<TestContext *> test();
TestContext* test(size_t i);
std::vector<antlr4::tree::TerminalNode *> COMMA();
antlr4::tree::TerminalNode* COMMA(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
TypedargslistContext* typedargslist();
class TfpdefContext : public antlr4::ParserRuleContext {
public:
TfpdefContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *NAME();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
TfpdefContext* tfpdef();
class StmtContext : public antlr4::ParserRuleContext {
public:
StmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
Simple_stmtContext *simple_stmt();
Compound_stmtContext *compound_stmt();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
StmtContext* stmt();
class Simple_stmtContext : public antlr4::ParserRuleContext {
public:
Simple_stmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
Small_stmtContext *small_stmt();
antlr4::tree::TerminalNode *NEWLINE();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Simple_stmtContext* simple_stmt();
class Small_stmtContext : public antlr4::ParserRuleContext {
public:
Small_stmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
Expr_stmtContext *expr_stmt();
Flow_stmtContext *flow_stmt();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Small_stmtContext* small_stmt();
class Expr_stmtContext : public antlr4::ParserRuleContext {
public:
Expr_stmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
std::vector<TestlistContext *> testlist();
TestlistContext* testlist(size_t i);
AugassignContext *augassign();
std::vector<antlr4::tree::TerminalNode *> ASSIGN();
antlr4::tree::TerminalNode* ASSIGN(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Expr_stmtContext* expr_stmt();
class AugassignContext : public antlr4::ParserRuleContext {
public:
AugassignContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *ADD_ASSIGN();
antlr4::tree::TerminalNode *SUB_ASSIGN();
antlr4::tree::TerminalNode *MULT_ASSIGN();
antlr4::tree::TerminalNode *DIV_ASSIGN();
antlr4::tree::TerminalNode *IDIV_ASSIGN();
antlr4::tree::TerminalNode *MOD_ASSIGN();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
AugassignContext* augassign();
class Flow_stmtContext : public antlr4::ParserRuleContext {
public:
Flow_stmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
Break_stmtContext *break_stmt();
Continue_stmtContext *continue_stmt();
Return_stmtContext *return_stmt();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Flow_stmtContext* flow_stmt();
class Break_stmtContext : public antlr4::ParserRuleContext {
public:
Break_stmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *BREAK();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Break_stmtContext* break_stmt();
class Continue_stmtContext : public antlr4::ParserRuleContext {
public:
Continue_stmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *CONTINUE();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Continue_stmtContext* continue_stmt();
class Return_stmtContext : public antlr4::ParserRuleContext {
public:
Return_stmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *RETURN();
TestlistContext *testlist();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Return_stmtContext* return_stmt();
class Compound_stmtContext : public antlr4::ParserRuleContext {
public:
Compound_stmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
If_stmtContext *if_stmt();
While_stmtContext *while_stmt();
FuncdefContext *funcdef();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Compound_stmtContext* compound_stmt();
class If_stmtContext : public antlr4::ParserRuleContext {
public:
If_stmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *IF();
std::vector<TestContext *> test();
TestContext* test(size_t i);
std::vector<antlr4::tree::TerminalNode *> COLON();
antlr4::tree::TerminalNode* COLON(size_t i);
std::vector<SuiteContext *> suite();
SuiteContext* suite(size_t i);
std::vector<antlr4::tree::TerminalNode *> ELIF();
antlr4::tree::TerminalNode* ELIF(size_t i);
antlr4::tree::TerminalNode *ELSE();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
If_stmtContext* if_stmt();
class While_stmtContext : public antlr4::ParserRuleContext {
public:
While_stmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *WHILE();
TestContext *test();
antlr4::tree::TerminalNode *COLON();
SuiteContext *suite();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
While_stmtContext* while_stmt();
class SuiteContext : public antlr4::ParserRuleContext {
public:
SuiteContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
Simple_stmtContext *simple_stmt();
antlr4::tree::TerminalNode *NEWLINE();
antlr4::tree::TerminalNode *INDENT();
antlr4::tree::TerminalNode *DEDENT();
std::vector<StmtContext *> stmt();
StmtContext* stmt(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
SuiteContext* suite();
class TestContext : public antlr4::ParserRuleContext {
public:
TestContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
Or_testContext *or_test();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
TestContext* test();
class Or_testContext : public antlr4::ParserRuleContext {
public:
Or_testContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
std::vector<And_testContext *> and_test();
And_testContext* and_test(size_t i);
std::vector<antlr4::tree::TerminalNode *> OR();
antlr4::tree::TerminalNode* OR(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Or_testContext* or_test();
class And_testContext : public antlr4::ParserRuleContext {
public:
And_testContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
std::vector<Not_testContext *> not_test();
Not_testContext* not_test(size_t i);
std::vector<antlr4::tree::TerminalNode *> AND();
antlr4::tree::TerminalNode* AND(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
And_testContext* and_test();
class Not_testContext : public antlr4::ParserRuleContext {
public:
Not_testContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *NOT();
Not_testContext *not_test();
ComparisonContext *comparison();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Not_testContext* not_test();
class ComparisonContext : public antlr4::ParserRuleContext {
public:
ComparisonContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
std::vector<Arith_exprContext *> arith_expr();
Arith_exprContext* arith_expr(size_t i);
std::vector<Comp_opContext *> comp_op();
Comp_opContext* comp_op(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
ComparisonContext* comparison();
class Comp_opContext : public antlr4::ParserRuleContext {
public:
Comp_opContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *LESS_THAN();
antlr4::tree::TerminalNode *GREATER_THAN();
antlr4::tree::TerminalNode *EQUALS();
antlr4::tree::TerminalNode *GT_EQ();
antlr4::tree::TerminalNode *LT_EQ();
antlr4::tree::TerminalNode *NOT_EQ_2();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Comp_opContext* comp_op();
class Arith_exprContext : public antlr4::ParserRuleContext {
public:
Arith_exprContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
std::vector<TermContext *> term();
TermContext* term(size_t i);
std::vector<Addorsub_opContext *> addorsub_op();
Addorsub_opContext* addorsub_op(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Arith_exprContext* arith_expr();
class Addorsub_opContext : public antlr4::ParserRuleContext {
public:
Addorsub_opContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *ADD();
antlr4::tree::TerminalNode *MINUS();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Addorsub_opContext* addorsub_op();
class TermContext : public antlr4::ParserRuleContext {
public:
TermContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
std::vector<FactorContext *> factor();
FactorContext* factor(size_t i);
std::vector<Muldivmod_opContext *> muldivmod_op();
Muldivmod_opContext* muldivmod_op(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
TermContext* term();
class Muldivmod_opContext : public antlr4::ParserRuleContext {
public:
Muldivmod_opContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *STAR();
antlr4::tree::TerminalNode *DIV();
antlr4::tree::TerminalNode *IDIV();
antlr4::tree::TerminalNode *MOD();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Muldivmod_opContext* muldivmod_op();
class FactorContext : public antlr4::ParserRuleContext {
public:
FactorContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
FactorContext *factor();
antlr4::tree::TerminalNode *ADD();
antlr4::tree::TerminalNode *MINUS();
Atom_exprContext *atom_expr();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
FactorContext* factor();
class Atom_exprContext : public antlr4::ParserRuleContext {
public:
Atom_exprContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
AtomContext *atom();
TrailerContext *trailer();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
Atom_exprContext* atom_expr();
class TrailerContext : public antlr4::ParserRuleContext {
public:
TrailerContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *OPEN_PAREN();
antlr4::tree::TerminalNode *CLOSE_PAREN();
ArglistContext *arglist();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
TrailerContext* trailer();
class AtomContext : public antlr4::ParserRuleContext {
public:
AtomContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *NAME();
antlr4::tree::TerminalNode *NUMBER();
antlr4::tree::TerminalNode *NONE();
antlr4::tree::TerminalNode *TRUE();
antlr4::tree::TerminalNode *FALSE();
antlr4::tree::TerminalNode *OPEN_PAREN();
TestContext *test();
antlr4::tree::TerminalNode *CLOSE_PAREN();
std::vector<antlr4::tree::TerminalNode *> STRING();
antlr4::tree::TerminalNode* STRING(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
AtomContext* atom();
class TestlistContext : public antlr4::ParserRuleContext {
public:
TestlistContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
std::vector<TestContext *> test();
TestContext* test(size_t i);
std::vector<antlr4::tree::TerminalNode *> COMMA();
antlr4::tree::TerminalNode* COMMA(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
TestlistContext* testlist();
class ArglistContext : public antlr4::ParserRuleContext {
public:
ArglistContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
std::vector<ArgumentContext *> argument();
ArgumentContext* argument(size_t i);
std::vector<antlr4::tree::TerminalNode *> COMMA();
antlr4::tree::TerminalNode* COMMA(size_t i);
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
ArglistContext* arglist();
class ArgumentContext : public antlr4::ParserRuleContext {
public:
ArgumentContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
std::vector<TestContext *> test();
TestContext* test(size_t i);
antlr4::tree::TerminalNode *ASSIGN();
virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;
};
ArgumentContext* argument();
// By default the static state used to implement the parser is lazily initialized during the first
// call to the constructor. You can call this function if you wish to initialize the static state
// ahead of time.
static void initialize();
private:
};

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,143 @@
INDENT=1
DEDENT=2
STRING=3
NUMBER=4
INTEGER=5
DEF=6
RETURN=7
IF=8
ELIF=9
ELSE=10
WHILE=11
FOR=12
IN=13
OR=14
AND=15
NOT=16
NONE=17
TRUE=18
FALSE=19
CONTINUE=20
BREAK=21
NEWLINE=22
NAME=23
STRING_LITERAL=24
BYTES_LITERAL=25
DECIMAL_INTEGER=26
OCT_INTEGER=27
HEX_INTEGER=28
BIN_INTEGER=29
FLOAT_NUMBER=30
IMAG_NUMBER=31
DOT=32
ELLIPSIS=33
STAR=34
OPEN_PAREN=35
CLOSE_PAREN=36
COMMA=37
COLON=38
SEMI_COLON=39
POWER=40
ASSIGN=41
OPEN_BRACK=42
CLOSE_BRACK=43
OR_OP=44
XOR=45
AND_OP=46
LEFT_SHIFT=47
RIGHT_SHIFT=48
ADD=49
MINUS=50
DIV=51
MOD=52
IDIV=53
NOT_OP=54
OPEN_BRACE=55
CLOSE_BRACE=56
LESS_THAN=57
GREATER_THAN=58
EQUALS=59
GT_EQ=60
LT_EQ=61
NOT_EQ_1=62
NOT_EQ_2=63
AT=64
ARROW=65
ADD_ASSIGN=66
SUB_ASSIGN=67
MULT_ASSIGN=68
AT_ASSIGN=69
DIV_ASSIGN=70
MOD_ASSIGN=71
AND_ASSIGN=72
OR_ASSIGN=73
XOR_ASSIGN=74
LEFT_SHIFT_ASSIGN=75
RIGHT_SHIFT_ASSIGN=76
POWER_ASSIGN=77
IDIV_ASSIGN=78
SKIP_=79
UNKNOWN_CHAR=80
'def'=6
'return'=7
'if'=8
'elif'=9
'else'=10
'while'=11
'for'=12
'in'=13
'or'=14
'and'=15
'not'=16
'None'=17
'True'=18
'False'=19
'continue'=20
'break'=21
'.'=32
'...'=33
'*'=34
'('=35
')'=36
','=37
':'=38
';'=39
'**'=40
'='=41
'['=42
']'=43
'|'=44
'^'=45
'&'=46
'<<'=47
'>>'=48
'+'=49
'-'=50
'/'=51
'%'=52
'//'=53
'~'=54
'{'=55
'}'=56
'<'=57
'>'=58
'=='=59
'>='=60
'<='=61
'<>'=62
'!='=63
'@'=64
'->'=65
'+='=66
'-='=67
'*='=68
'@='=69
'/='=70
'%='=71
'&='=72
'|='=73
'^='=74
'<<='=75
'>>='=76
'**='=77
'//='=78

View File

@ -0,0 +1,7 @@
// Generated from Python3Parser.g4 by ANTLR 4.13.1
#include "Python3ParserBaseVisitor.h"

View File

@ -0,0 +1,160 @@
// Generated from Python3Parser.g4 by ANTLR 4.13.1
#pragma once
#include "antlr4-runtime.h"
#include "Python3ParserVisitor.h"
/**
* This class provides an empty implementation of Python3ParserVisitor, which can be
* extended to create a visitor which only needs to handle a subset of the available methods.
*/
class Python3ParserBaseVisitor : public Python3ParserVisitor {
public:
virtual std::any visitFile_input(Python3Parser::File_inputContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitFuncdef(Python3Parser::FuncdefContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitParameters(Python3Parser::ParametersContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitTypedargslist(Python3Parser::TypedargslistContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitTfpdef(Python3Parser::TfpdefContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitStmt(Python3Parser::StmtContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitSimple_stmt(Python3Parser::Simple_stmtContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitSmall_stmt(Python3Parser::Small_stmtContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitExpr_stmt(Python3Parser::Expr_stmtContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitAugassign(Python3Parser::AugassignContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitFlow_stmt(Python3Parser::Flow_stmtContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitBreak_stmt(Python3Parser::Break_stmtContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitContinue_stmt(Python3Parser::Continue_stmtContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitReturn_stmt(Python3Parser::Return_stmtContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitCompound_stmt(Python3Parser::Compound_stmtContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitIf_stmt(Python3Parser::If_stmtContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitWhile_stmt(Python3Parser::While_stmtContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitSuite(Python3Parser::SuiteContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitTest(Python3Parser::TestContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitOr_test(Python3Parser::Or_testContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitAnd_test(Python3Parser::And_testContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitNot_test(Python3Parser::Not_testContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitComparison(Python3Parser::ComparisonContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitComp_op(Python3Parser::Comp_opContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitArith_expr(Python3Parser::Arith_exprContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitAddorsub_op(Python3Parser::Addorsub_opContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitTerm(Python3Parser::TermContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitMuldivmod_op(Python3Parser::Muldivmod_opContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitFactor(Python3Parser::FactorContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitAtom_expr(Python3Parser::Atom_exprContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitTrailer(Python3Parser::TrailerContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitAtom(Python3Parser::AtomContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitTestlist(Python3Parser::TestlistContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitArglist(Python3Parser::ArglistContext *ctx) override {
return visitChildren(ctx);
}
virtual std::any visitArgument(Python3Parser::ArgumentContext *ctx) override {
return visitChildren(ctx);
}
};

View File

@ -0,0 +1,7 @@
// Generated from Python3Parser.g4 by ANTLR 4.13.1
#include "Python3ParserVisitor.h"

View File

@ -0,0 +1,94 @@
// Generated from Python3Parser.g4 by ANTLR 4.13.1
#pragma once
#include "antlr4-runtime.h"
#include "Python3Parser.h"
/**
* This class defines an abstract visitor for a parse tree
* produced by Python3Parser.
*/
class Python3ParserVisitor : public antlr4::tree::AbstractParseTreeVisitor {
public:
/**
* Visit parse trees produced by Python3Parser.
*/
virtual std::any visitFile_input(Python3Parser::File_inputContext *context) = 0;
virtual std::any visitFuncdef(Python3Parser::FuncdefContext *context) = 0;
virtual std::any visitParameters(Python3Parser::ParametersContext *context) = 0;
virtual std::any visitTypedargslist(Python3Parser::TypedargslistContext *context) = 0;
virtual std::any visitTfpdef(Python3Parser::TfpdefContext *context) = 0;
virtual std::any visitStmt(Python3Parser::StmtContext *context) = 0;
virtual std::any visitSimple_stmt(Python3Parser::Simple_stmtContext *context) = 0;
virtual std::any visitSmall_stmt(Python3Parser::Small_stmtContext *context) = 0;
virtual std::any visitExpr_stmt(Python3Parser::Expr_stmtContext *context) = 0;
virtual std::any visitAugassign(Python3Parser::AugassignContext *context) = 0;
virtual std::any visitFlow_stmt(Python3Parser::Flow_stmtContext *context) = 0;
virtual std::any visitBreak_stmt(Python3Parser::Break_stmtContext *context) = 0;
virtual std::any visitContinue_stmt(Python3Parser::Continue_stmtContext *context) = 0;
virtual std::any visitReturn_stmt(Python3Parser::Return_stmtContext *context) = 0;
virtual std::any visitCompound_stmt(Python3Parser::Compound_stmtContext *context) = 0;
virtual std::any visitIf_stmt(Python3Parser::If_stmtContext *context) = 0;
virtual std::any visitWhile_stmt(Python3Parser::While_stmtContext *context) = 0;
virtual std::any visitSuite(Python3Parser::SuiteContext *context) = 0;
virtual std::any visitTest(Python3Parser::TestContext *context) = 0;
virtual std::any visitOr_test(Python3Parser::Or_testContext *context) = 0;
virtual std::any visitAnd_test(Python3Parser::And_testContext *context) = 0;
virtual std::any visitNot_test(Python3Parser::Not_testContext *context) = 0;
virtual std::any visitComparison(Python3Parser::ComparisonContext *context) = 0;
virtual std::any visitComp_op(Python3Parser::Comp_opContext *context) = 0;
virtual std::any visitArith_expr(Python3Parser::Arith_exprContext *context) = 0;
virtual std::any visitAddorsub_op(Python3Parser::Addorsub_opContext *context) = 0;
virtual std::any visitTerm(Python3Parser::TermContext *context) = 0;
virtual std::any visitMuldivmod_op(Python3Parser::Muldivmod_opContext *context) = 0;
virtual std::any visitFactor(Python3Parser::FactorContext *context) = 0;
virtual std::any visitAtom_expr(Python3Parser::Atom_exprContext *context) = 0;
virtual std::any visitTrailer(Python3Parser::TrailerContext *context) = 0;
virtual std::any visitAtom(Python3Parser::AtomContext *context) = 0;
virtual std::any visitTestlist(Python3Parser::TestlistContext *context) = 0;
virtual std::any visitArglist(Python3Parser::ArglistContext *context) = 0;
virtual std::any visitArgument(Python3Parser::ArgumentContext *context) = 0;
};

92
readme.md Normal file
View File

@ -0,0 +1,92 @@
# 🐍Python Interpreter
## 🧾 目录
- [✨ 简介](#✨简介)
- [📚 作业说明](#📚作业说明)
- [⚠️ 实现要求](#⚠️实现要求)
- [🛎️ 评测方式](#🛎️评测方式)
- [提交方式](#提交方式)
- [测试点分布](#测试点分布)
- [💎Bonus](#💎Bonus)
- [📝Guide](#📝Guide)
- [📄 语法](#📄语法)
- [ANTLR](#⚙Antlr)
- [🧪 实现](#🧪实现)
- [📇 索引](#📇索引)
## ✨简介
本次大作业要求你们实现一个简单的 Python 解释器,接受简化过的 Python 代码,按照控制流执行代码。
> 解释器Interpreter是一种计算机程序能够把解释型语言解释执行。
> 解释器就像一位“中间人”。解释器边解释边执行,因此依赖于解释器的程序运行速度比较缓慢。
> 解释器的好处是它不需要重新编译整个程序,从而减轻了每次程序更新后编译的负担。
> 相对的,编译器一次性将所有源代码编译成二进制文件,执行时无需依赖编译器或其他额外的程序。
## 📚作业说明
### ⚠️实现要求
1. 使用 OOP 实现 Python Interpreter锻炼 OOP 能力。若不按照要求会在 code review 时扣除一定分数。
2. 作业不低于按数据总的通过比例线性给分。助教会下发部分数据在作业仓库中,还有另一部分数据不会提供。
这意味着你需要自己手写测试数据给自己测试,如果你对自己造的数据是否满足要求有疑问,请及时向助教询问。
3. 首先完成 Prework 里面的前置任务。前置任务不计分,但要求**必做**。如果不完成前置任务则 Python 解释器将没有分数。
### 🛎️评测方式
使用 `git` 在 OJ 上进行提交。OJ 将根据根目录下的 `CMakeLists.txt` 来构建你的程序。
#### 提交方式
在代码提交页面输入你 `git` 仓库的地址
#### 测试点分布
测试点分布如下:
```text
BigIntegerTest: 1 - 20
Sample: 21 - 34
AdvancedTest: 35 - 52
ComplexTest: 53 - 56
CornerTest: 57 - 66
```
### 💎Bonus
1. 修改 `.g4``Evalvisitor` 来支持更高级的语法规则
2. 增加语法检查
3. 不使用 Antlr4自己实现 Lexer 和 Parser
实现任何的 bonus 之前,都请与助教联系。
## 📝Guide
关于本次大作业的所有问题,都可以在 [Q&A](https://notes.sjtu.edu.cn/4RNcROAgTHmWhs1ZX4OJ7w) 中或者本仓库的 issue 中提问。助教会更新在 Q&A 和文档中。
### 📄语法
本次作业使用的 Python 的语法在 [Grammar](docs/grammar.md) 查看。
### ⚙ANTLR
关于 ANTLR 的安装与使用,详见 [ANTLR](docs/antlr_guide.md)。
### 🧪实现
如果你想知道从何下手,可以参考 [完成流程](docs/workflow_details.md) 与 [实现细节](docs/implementation_details.md)。
### 📇索引
如果你想查看一段 Python 代码,通过 ANTLR 生成的语法树的结构,参考:[1](docs/antlr_guide.md#antlr-配置)。
如果你想知道 `std::any` 是什么,参考:[完成流程](docs/workflow_details.md) 和 [前置任务](Prework/README.md)。
如果你想知道 `ctx` 大致是什么,参考:[实现细节](docs/implementation_details.md)。
如果你想知道怎么遍历树,参考:[4](docs/workflow_details.md#step-4-完成-srcevalvisitorh)。
如果你想看一个 demo 来理解这个作业,参考:[5](https://github.com/ACMClassCourse-2021/Apple-Pie-Interpreter)。
还有一些 [小建议](docs/suggestions.md)。

902
resources/Python3Lexer.g4 Normal file
View File

@ -0,0 +1,902 @@
lexer grammar Python3Lexer;
tokens {
INDENT,
DEDENT
}
@header {
#include <list>
#include <regex>
}
@lexer::members {
// A queue where extra tokens are pushed on (see the NEWLINE lexer rule).
private: std::list<antlr4::Token*> tokens ;
// The stack that keeps track of the indentation level.
private: std::stack<int> indents ;
// The amount of opened braces, brackets and parenthesis.
private: int opened = 0;
// The most recently produced token.
private: antlr4::Token* lastToken = nullptr;
public: void emit(std::unique_ptr<antlr4::Token> t) override {
token.release();
token=std::move(t);
tokens.push_back(token.get());
// std::cout<<t->toString()<<std::endl;
}
public: std::unique_ptr<antlr4::Token> nextToken() override {
// Check if the end-of-file is ahead and there are still some DEDENTS expected.
if (_input->LA(1) == EOF && !this->indents.empty()) {
// Remove any trailing EOF tokens from our buffer.
for(auto i=tokens.rbegin();i!=tokens.rend();){
auto tmp=i;
i++;
if((*tmp)->getType()==EOF){
tokens.erase(tmp.base());
}
}
// First emit an extra line break that serves as the end of the statement.
std::unique_ptr<antlr4::Token> tmp=commonToken(Python3Lexer::NEWLINE, "\n");
this->emit(std::move(tmp));
// Now emit as much DEDENT tokens as needed.
while (!indents.empty()) {
auto tmp=createDedent();
this->emit(std::move(tmp));
indents.pop();
}
// Put the EOF back on the token stream.
this->emit(commonToken(static_cast<int>(Python3Lexer::EOF), "<EOF>"));
}
std::unique_ptr<antlr4::Token> next = Lexer::nextToken();
if (next->getChannel() == antlr4::Token::DEFAULT_CHANNEL) {
// Keep track of the last token on the default channel.
this->lastToken = next.get();
}
if (tokens.empty()) {
return std::move(next);
} else{
next.release();
auto tmp=tokens.front();
tokens.pop_front();
return std::unique_ptr<antlr4::Token>(tmp);
}
}
private: std::unique_ptr<antlr4::Token> createDedent() {
auto dedent = commonToken(Python3Lexer::DEDENT, "");
dedent->setLine(this->lastToken->getLine());
return std::move(dedent);
}
private: std::unique_ptr<antlr4::CommonToken> commonToken(int type,std::string text) {
int stop = this->getCharIndex() - 1;
int start = text.empty() ? stop : stop - text.length() + 1;
return std::move(std::unique_ptr<antlr4::CommonToken>(new antlr4::CommonToken({ this, _input },
type,
DEFAULT_TOKEN_CHANNEL, start, stop)));
}
// Calculates the indentation of the provided spaces, taking the
// following rules into account:
//
// "Tabs are replaced (from left to right) by one to eight spaces
// such that the total number of characters up to and including
// the replacement is a multiple of eight [...]"
//
// -- https://docs.python.org/3.1/reference/lexical_analysis.html#indentation
static int getIndentationCount(std::string spaces) {
int count = 0;
for (char ch : spaces) {
switch (ch) {
case '\t':
count += 8 - (count % 8);
break;
default:
// A normal space char.
count++;
}
}
return count;
}
bool atStartOfInput() {
return Lexer::getCharPositionInLine() == 0 && Lexer::getLine() == 1;
}
}
STRING: STRING_LITERAL | BYTES_LITERAL;
NUMBER: INTEGER | FLOAT_NUMBER | IMAG_NUMBER;
INTEGER:
DECIMAL_INTEGER
| OCT_INTEGER
| HEX_INTEGER
| BIN_INTEGER;
DEF: 'def';
RETURN: 'return';
IF: 'if';
ELIF: 'elif';
ELSE: 'else';
WHILE: 'while';
FOR: 'for';
IN: 'in';
OR: 'or';
AND: 'and';
NOT: 'not';
NONE: 'None';
TRUE: 'True';
FALSE: 'False';
CONTINUE: 'continue';
BREAK: 'break';
NEWLINE: (
{atStartOfInput()}? SPACES
| ( '\r'? '\n' | '\r' | '\f') SPACES?
) {
{
std::string pattern1="[^\r\n\f]+";
std::string pattern2="[\r\n\f]+";
std::regex re1(pattern1);
std::regex re2(pattern2);
std::string fmt="";
std::string newLine=regex_replace(getText(),re1,fmt);
std::string spaces = regex_replace(getText(),re2,fmt);
int next = _input->LA(1);
if (opened > 0 || next == '\r' || next == '\n' || next == '\f' || next == '#') {
// If we're inside a list or on a blank line, ignore all indents,
// dedents and line breaks.
skip();
}
else {
emit(commonToken(NEWLINE, newLine));
int indent = getIndentationCount(spaces);
int previous = indents.empty() ? 0 : indents.top();
if (indent == previous) {
// skip indents of the same size as the present indent-size
skip();
}
else if (indent > previous) {
indents.push(indent);
emit(commonToken(Python3Lexer::INDENT, spaces));
}
else {
// Possibly emit more than 1 DEDENT token.
while(!indents.empty() && indents.top() > indent) {
this->emit(createDedent());
indents.pop();
}
}
}
}
};
/// identifier ::= id_start id_continue*
NAME: ID_START ID_CONTINUE*;
/// stringliteral ::= [stringprefix](shortstring | longstring) / stringprefix ::= "r" | "u" | "R" |
// "U" | "f" | "F" / | "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF"
STRING_LITERAL: ([rR] | [uU] | [fF] | ( [fF] [rR]) | ( [rR] [fF]))? (
SHORT_STRING
| LONG_STRING
);
/// bytesliteral ::= bytesprefix(shortbytes | longbytes) / bytesprefix ::= "b" | "B" | "br" | "Br" |
// "bR" | "BR" | "rb" | "rB" | "Rb" | "RB"
BYTES_LITERAL: ([bB] | ( [bB] [rR]) | ( [rR] [bB])) (
SHORT_BYTES
| LONG_BYTES
);
/// decimalinteger ::= nonzerodigit digit* | "0"+
DECIMAL_INTEGER: NON_ZERO_DIGIT DIGIT* | '0'+;
/// octinteger ::= "0" ("o" | "O") octdigit+
OCT_INTEGER: '0' [oO] OCT_DIGIT+;
/// hexinteger ::= "0" ("x" | "X") hexdigit+
HEX_INTEGER: '0' [xX] HEX_DIGIT+;
/// bininteger ::= "0" ("b" | "B") bindigit+
BIN_INTEGER: '0' [bB] BIN_DIGIT+;
/// floatnumber ::= pointfloat | exponentfloat
FLOAT_NUMBER: POINT_FLOAT | EXPONENT_FLOAT;
/// imagnumber ::= (floatnumber | intpart) ("j" | "J")
IMAG_NUMBER: ( FLOAT_NUMBER | INT_PART) [jJ];
DOT: '.';
ELLIPSIS: '...';
STAR: '*';
OPEN_PAREN: '(' {opened++;};
CLOSE_PAREN: ')' {opened--;};
COMMA: ',';
COLON: ':';
SEMI_COLON: ';';
POWER: '**';
ASSIGN: '=';
OPEN_BRACK: '[' {opened++;};
CLOSE_BRACK: ']' {opened--;};
OR_OP: '|';
XOR: '^';
AND_OP: '&';
LEFT_SHIFT: '<<';
RIGHT_SHIFT: '>>';
ADD: '+';
MINUS: '-';
DIV: '/';
MOD: '%';
IDIV: '//';
NOT_OP: '~';
OPEN_BRACE: '{' {opened++;};
CLOSE_BRACE: '}' {opened--;};
LESS_THAN: '<';
GREATER_THAN: '>';
EQUALS: '==';
GT_EQ: '>=';
LT_EQ: '<=';
NOT_EQ_1: '<>';
NOT_EQ_2: '!=';
AT: '@';
ARROW: '->';
ADD_ASSIGN: '+=';
SUB_ASSIGN: '-=';
MULT_ASSIGN: '*=';
AT_ASSIGN: '@=';
DIV_ASSIGN: '/=';
MOD_ASSIGN: '%=';
AND_ASSIGN: '&=';
OR_ASSIGN: '|=';
XOR_ASSIGN: '^=';
LEFT_SHIFT_ASSIGN: '<<=';
RIGHT_SHIFT_ASSIGN: '>>=';
POWER_ASSIGN: '**=';
IDIV_ASSIGN: '//=';
SKIP_: ( SPACES | COMMENT | LINE_JOINING) -> skip;
UNKNOWN_CHAR: .;
/*
* fragments
*/
/// shortstring ::= "'" shortstringitem* "'" | '"' shortstringitem* '"' / shortstringitem ::=
// shortstringchar | stringescapeseq / shortstringchar ::= <any source character except "\" or
// newline or the quote>
fragment SHORT_STRING:
'\'' (STRING_ESCAPE_SEQ | ~[\\\r\n\f'])* '\''
| '"' ( STRING_ESCAPE_SEQ | ~[\\\r\n\f"])* '"';
/// longstring ::= "'''" longstringitem* "'''" | '"""' longstringitem* '"""'
fragment LONG_STRING:
'\'\'\'' LONG_STRING_ITEM*? '\'\'\''
| '"""' LONG_STRING_ITEM*? '"""';
/// longstringitem ::= longstringchar | stringescapeseq
fragment LONG_STRING_ITEM: LONG_STRING_CHAR | STRING_ESCAPE_SEQ;
/// longstringchar ::= <any source character except "\">
fragment LONG_STRING_CHAR: ~'\\';
/// stringescapeseq ::= "\" <any source character>
fragment STRING_ESCAPE_SEQ: '\\' . | '\\' NEWLINE;
/// nonzerodigit ::= "1"..."9"
fragment NON_ZERO_DIGIT: [1-9];
/// digit ::= "0"..."9"
fragment DIGIT: [0-9];
/// octdigit ::= "0"..."7"
fragment OCT_DIGIT: [0-7];
/// hexdigit ::= digit | "a"..."f" | "A"..."F"
fragment HEX_DIGIT: [0-9a-fA-F];
/// bindigit ::= "0" | "1"
fragment BIN_DIGIT: [01];
/// pointfloat ::= [intpart] fraction | intpart "."
fragment POINT_FLOAT: INT_PART? FRACTION | INT_PART '.';
/// exponentfloat ::= (intpart | pointfloat) exponent
fragment EXPONENT_FLOAT: ( INT_PART | POINT_FLOAT) EXPONENT;
/// intpart ::= digit+
fragment INT_PART: DIGIT+;
/// fraction ::= "." digit+
fragment FRACTION: '.' DIGIT+;
/// exponent ::= ("e" | "E") ["+" | "-"] digit+
fragment EXPONENT: [eE] [+-]? DIGIT+;
/// shortbytes ::= "'" shortbytesitem* "'" | '"' shortbytesitem* '"' / shortbytesitem ::=
// shortbyteschar | bytesescapeseq
fragment SHORT_BYTES:
'\'' (SHORT_BYTES_CHAR_NO_SINGLE_QUOTE | BYTES_ESCAPE_SEQ)* '\''
| '"' (SHORT_BYTES_CHAR_NO_DOUBLE_QUOTE | BYTES_ESCAPE_SEQ)* '"';
/// longbytes ::= "'''" longbytesitem* "'''" | '"""' longbytesitem* '"""'
fragment LONG_BYTES:
'\'\'\'' LONG_BYTES_ITEM*? '\'\'\''
| '"""' LONG_BYTES_ITEM*? '"""';
/// longbytesitem ::= longbyteschar | bytesescapeseq
fragment LONG_BYTES_ITEM: LONG_BYTES_CHAR | BYTES_ESCAPE_SEQ;
/// shortbyteschar ::= <any ASCII character except "\" or newline or the quote>
fragment SHORT_BYTES_CHAR_NO_SINGLE_QUOTE:
[\u0000-\u0009]
| [\u000B-\u000C]
| [\u000E-\u0026]
| [\u0028-\u005B]
| [\u005D-\u007F];
fragment SHORT_BYTES_CHAR_NO_DOUBLE_QUOTE:
[\u0000-\u0009]
| [\u000B-\u000C]
| [\u000E-\u0021]
| [\u0023-\u005B]
| [\u005D-\u007F];
/// longbyteschar ::= <any ASCII character except "\">
fragment LONG_BYTES_CHAR: [\u0000-\u005B] | [\u005D-\u007F];
/// bytesescapeseq ::= "\" <any ASCII character>
fragment BYTES_ESCAPE_SEQ: '\\' [\u0000-\u007F];
fragment SPACES: [ \t]+;
fragment COMMENT: '#' ~[\r\n\f]*;
fragment LINE_JOINING: '\\' SPACES? ( '\r'? '\n' | '\r' | '\f');
/// id_start ::= <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
fragment ID_START:
'_'
| [A-Z]
| [a-z]
| '\u00AA'
| '\u00B5'
| '\u00BA'
| [\u00C0-\u00D6]
| [\u00D8-\u00F6]
| [\u00F8-\u01BA]
| '\u01BB'
| [\u01BC-\u01BF]
| [\u01C0-\u01C3]
| [\u01C4-\u0241]
| [\u0250-\u02AF]
| [\u02B0-\u02C1]
| [\u02C6-\u02D1]
| [\u02E0-\u02E4]
| '\u02EE'
| '\u037A'
| '\u0386'
| [\u0388-\u038A]
| '\u038C'
| [\u038E-\u03A1]
| [\u03A3-\u03CE]
| [\u03D0-\u03F5]
| [\u03F7-\u0481]
| [\u048A-\u04CE]
| [\u04D0-\u04F9]
| [\u0500-\u050F]
| [\u0531-\u0556]
| '\u0559'
| [\u0561-\u0587]
| [\u05D0-\u05EA]
| [\u05F0-\u05F2]
| [\u0621-\u063A]
| '\u0640'
| [\u0641-\u064A]
| [\u066E-\u066F]
| [\u0671-\u06D3]
| '\u06D5'
| [\u06E5-\u06E6]
| [\u06EE-\u06EF]
| [\u06FA-\u06FC]
| '\u06FF'
| '\u0710'
| [\u0712-\u072F]
| [\u074D-\u076D]
| [\u0780-\u07A5]
| '\u07B1'
| [\u0904-\u0939]
| '\u093D'
| '\u0950'
| [\u0958-\u0961]
| '\u097D'
| [\u0985-\u098C]
| [\u098F-\u0990]
| [\u0993-\u09A8]
| [\u09AA-\u09B0]
| '\u09B2'
| [\u09B6-\u09B9]
| '\u09BD'
| '\u09CE'
| [\u09DC-\u09DD]
| [\u09DF-\u09E1]
| [\u09F0-\u09F1]
| [\u0A05-\u0A0A]
| [\u0A0F-\u0A10]
| [\u0A13-\u0A28]
| [\u0A2A-\u0A30]
| [\u0A32-\u0A33]
| [\u0A35-\u0A36]
| [\u0A38-\u0A39]
| [\u0A59-\u0A5C]
| '\u0A5E'
| [\u0A72-\u0A74]
| [\u0A85-\u0A8D]
| [\u0A8F-\u0A91]
| [\u0A93-\u0AA8]
| [\u0AAA-\u0AB0]
| [\u0AB2-\u0AB3]
| [\u0AB5-\u0AB9]
| '\u0ABD'
| '\u0AD0'
| [\u0AE0-\u0AE1]
| [\u0B05-\u0B0C]
| [\u0B0F-\u0B10]
| [\u0B13-\u0B28]
| [\u0B2A-\u0B30]
| [\u0B32-\u0B33]
| [\u0B35-\u0B39]
| '\u0B3D'
| [\u0B5C-\u0B5D]
| [\u0B5F-\u0B61]
| '\u0B71'
| '\u0B83'
| [\u0B85-\u0B8A]
| [\u0B8E-\u0B90]
| [\u0B92-\u0B95]
| [\u0B99-\u0B9A]
| '\u0B9C'
| [\u0B9E-\u0B9F]
| [\u0BA3-\u0BA4]
| [\u0BA8-\u0BAA]
| [\u0BAE-\u0BB9]
| [\u0C05-\u0C0C]
| [\u0C0E-\u0C10]
| [\u0C12-\u0C28]
| [\u0C2A-\u0C33]
| [\u0C35-\u0C39]
| [\u0C60-\u0C61]
| [\u0C85-\u0C8C]
| [\u0C8E-\u0C90]
| [\u0C92-\u0CA8]
| [\u0CAA-\u0CB3]
| [\u0CB5-\u0CB9]
| '\u0CBD'
| '\u0CDE'
| [\u0CE0-\u0CE1]
| [\u0D05-\u0D0C]
| [\u0D0E-\u0D10]
| [\u0D12-\u0D28]
| [\u0D2A-\u0D39]
| [\u0D60-\u0D61]
| [\u0D85-\u0D96]
| [\u0D9A-\u0DB1]
| [\u0DB3-\u0DBB]
| '\u0DBD'
| [\u0DC0-\u0DC6]
| [\u0E01-\u0E30]
| [\u0E32-\u0E33]
| [\u0E40-\u0E45]
| '\u0E46'
| [\u0E81-\u0E82]
| '\u0E84'
| [\u0E87-\u0E88]
| '\u0E8A'
| '\u0E8D'
| [\u0E94-\u0E97]
| [\u0E99-\u0E9F]
| [\u0EA1-\u0EA3]
| '\u0EA5'
| '\u0EA7'
| [\u0EAA-\u0EAB]
| [\u0EAD-\u0EB0]
| [\u0EB2-\u0EB3]
| '\u0EBD'
| [\u0EC0-\u0EC4]
| '\u0EC6'
| [\u0EDC-\u0EDD]
| '\u0F00'
| [\u0F40-\u0F47]
| [\u0F49-\u0F6A]
| [\u0F88-\u0F8B]
| [\u1000-\u1021]
| [\u1023-\u1027]
| [\u1029-\u102A]
| [\u1050-\u1055]
| [\u10A0-\u10C5]
| [\u10D0-\u10FA]
| '\u10FC'
| [\u1100-\u1159]
| [\u115F-\u11A2]
| [\u11A8-\u11F9]
| [\u1200-\u1248]
| [\u124A-\u124D]
| [\u1250-\u1256]
| '\u1258'
| [\u125A-\u125D]
| [\u1260-\u1288]
| [\u128A-\u128D]
| [\u1290-\u12B0]
| [\u12B2-\u12B5]
| [\u12B8-\u12BE]
| '\u12C0'
| [\u12C2-\u12C5]
| [\u12C8-\u12D6]
| [\u12D8-\u1310]
| [\u1312-\u1315]
| [\u1318-\u135A]
| [\u1380-\u138F]
| [\u13A0-\u13F4]
| [\u1401-\u166C]
| [\u166F-\u1676]
| [\u1681-\u169A]
| [\u16A0-\u16EA]
| [\u16EE-\u16F0]
| [\u1700-\u170C]
| [\u170E-\u1711]
| [\u1720-\u1731]
| [\u1740-\u1751]
| [\u1760-\u176C]
| [\u176E-\u1770]
| [\u1780-\u17B3]
| '\u17D7'
| '\u17DC'
| [\u1820-\u1842]
| '\u1843'
| [\u1844-\u1877]
| [\u1880-\u18A8]
| [\u1900-\u191C]
| [\u1950-\u196D]
| [\u1970-\u1974]
| [\u1980-\u19A9]
| [\u19C1-\u19C7]
| [\u1A00-\u1A16]
| [\u1D00-\u1D2B]
| [\u1D2C-\u1D61]
| [\u1D62-\u1D77]
| '\u1D78'
| [\u1D79-\u1D9A]
| [\u1D9B-\u1DBF]
| [\u1E00-\u1E9B]
| [\u1EA0-\u1EF9]
| [\u1F00-\u1F15]
| [\u1F18-\u1F1D]
| [\u1F20-\u1F45]
| [\u1F48-\u1F4D]
| [\u1F50-\u1F57]
| '\u1F59'
| '\u1F5B'
| '\u1F5D'
| [\u1F5F-\u1F7D]
| [\u1F80-\u1FB4]
| [\u1FB6-\u1FBC]
| '\u1FBE'
| [\u1FC2-\u1FC4]
| [\u1FC6-\u1FCC]
| [\u1FD0-\u1FD3]
| [\u1FD6-\u1FDB]
| [\u1FE0-\u1FEC]
| [\u1FF2-\u1FF4]
| [\u1FF6-\u1FFC]
| '\u2071'
| '\u207F'
| [\u2090-\u2094]
| '\u2102'
| '\u2107'
| [\u210A-\u2113]
| '\u2115'
| '\u2118'
| [\u2119-\u211D]
| '\u2124'
| '\u2126'
| '\u2128'
| [\u212A-\u212D]
| '\u212E'
| [\u212F-\u2131]
| [\u2133-\u2134]
| [\u2135-\u2138]
| '\u2139'
| [\u213C-\u213F]
| [\u2145-\u2149]
| [\u2160-\u2183]
| [\u2C00-\u2C2E]
| [\u2C30-\u2C5E]
| [\u2C80-\u2CE4]
| [\u2D00-\u2D25]
| [\u2D30-\u2D65]
| '\u2D6F'
| [\u2D80-\u2D96]
| [\u2DA0-\u2DA6]
| [\u2DA8-\u2DAE]
| [\u2DB0-\u2DB6]
| [\u2DB8-\u2DBE]
| [\u2DC0-\u2DC6]
| [\u2DC8-\u2DCE]
| [\u2DD0-\u2DD6]
| [\u2DD8-\u2DDE]
| '\u3005'
| '\u3006'
| '\u3007'
| [\u3021-\u3029]
| [\u3031-\u3035]
| [\u3038-\u303A]
| '\u303B'
| '\u303C'
| [\u3041-\u3096]
| [\u309B-\u309C]
| [\u309D-\u309E]
| '\u309F'
| [\u30A1-\u30FA]
| [\u30FC-\u30FE]
| '\u30FF'
| [\u3105-\u312C]
| [\u3131-\u318E]
| [\u31A0-\u31B7]
| [\u31F0-\u31FF]
| [\u3400-\u4DB5]
| [\u4E00-\u9FBB]
| [\uA000-\uA014]
| '\uA015'
| [\uA016-\uA48C]
| [\uA800-\uA801]
| [\uA803-\uA805]
| [\uA807-\uA80A]
| [\uA80C-\uA822]
| [\uAC00-\uD7A3]
| [\uF900-\uFA2D]
| [\uFA30-\uFA6A]
| [\uFA70-\uFAD9]
| [\uFB00-\uFB06]
| [\uFB13-\uFB17]
| '\uFB1D'
| [\uFB1F-\uFB28]
| [\uFB2A-\uFB36]
| [\uFB38-\uFB3C]
| '\uFB3E'
| [\uFB40-\uFB41]
| [\uFB43-\uFB44]
| [\uFB46-\uFBB1]
| [\uFBD3-\uFD3D]
| [\uFD50-\uFD8F]
| [\uFD92-\uFDC7]
| [\uFDF0-\uFDFB]
| [\uFE70-\uFE74]
| [\uFE76-\uFEFC]
| [\uFF21-\uFF3A]
| [\uFF41-\uFF5A]
| [\uFF66-\uFF6F]
| '\uFF70'
| [\uFF71-\uFF9D]
| [\uFF9E-\uFF9F]
| [\uFFA0-\uFFBE]
| [\uFFC2-\uFFC7]
| [\uFFCA-\uFFCF]
| [\uFFD2-\uFFD7]
| [\uFFDA-\uFFDC];
/// id_continue ::= <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
fragment ID_CONTINUE:
ID_START
| [0-9]
| [\u0300-\u036F]
| [\u0483-\u0486]
| [\u0591-\u05B9]
| [\u05BB-\u05BD]
| '\u05BF'
| [\u05C1-\u05C2]
| [\u05C4-\u05C5]
| '\u05C7'
| [\u0610-\u0615]
| [\u064B-\u065E]
| [\u0660-\u0669]
| '\u0670'
| [\u06D6-\u06DC]
| [\u06DF-\u06E4]
| [\u06E7-\u06E8]
| [\u06EA-\u06ED]
| [\u06F0-\u06F9]
| '\u0711'
| [\u0730-\u074A]
| [\u07A6-\u07B0]
| [\u0901-\u0902]
| '\u0903'
| '\u093C'
| [\u093E-\u0940]
| [\u0941-\u0948]
| [\u0949-\u094C]
| '\u094D'
| [\u0951-\u0954]
| [\u0962-\u0963]
| [\u0966-\u096F]
| '\u0981'
| [\u0982-\u0983]
| '\u09BC'
| [\u09BE-\u09C0]
| [\u09C1-\u09C4]
| [\u09C7-\u09C8]
| [\u09CB-\u09CC]
| '\u09CD'
| '\u09D7'
| [\u09E2-\u09E3]
| [\u09E6-\u09EF]
| [\u0A01-\u0A02]
| '\u0A03'
| '\u0A3C'
| [\u0A3E-\u0A40]
| [\u0A41-\u0A42]
| [\u0A47-\u0A48]
| [\u0A4B-\u0A4D]
| [\u0A66-\u0A6F]
| [\u0A70-\u0A71]
| [\u0A81-\u0A82]
| '\u0A83'
| '\u0ABC'
| [\u0ABE-\u0AC0]
| [\u0AC1-\u0AC5]
| [\u0AC7-\u0AC8]
| '\u0AC9'
| [\u0ACB-\u0ACC]
| '\u0ACD'
| [\u0AE2-\u0AE3]
| [\u0AE6-\u0AEF]
| '\u0B01'
| [\u0B02-\u0B03]
| '\u0B3C'
| '\u0B3E'
| '\u0B3F'
| '\u0B40'
| [\u0B41-\u0B43]
| [\u0B47-\u0B48]
| [\u0B4B-\u0B4C]
| '\u0B4D'
| '\u0B56'
| '\u0B57'
| [\u0B66-\u0B6F]
| '\u0B82'
| [\u0BBE-\u0BBF]
| '\u0BC0'
| [\u0BC1-\u0BC2]
| [\u0BC6-\u0BC8]
| [\u0BCA-\u0BCC]
| '\u0BCD'
| '\u0BD7'
| [\u0BE6-\u0BEF]
| [\u0C01-\u0C03]
| [\u0C3E-\u0C40]
| [\u0C41-\u0C44]
| [\u0C46-\u0C48]
| [\u0C4A-\u0C4D]
| [\u0C55-\u0C56]
| [\u0C66-\u0C6F]
| [\u0C82-\u0C83]
| '\u0CBC'
| '\u0CBE'
| '\u0CBF'
| [\u0CC0-\u0CC4]
| '\u0CC6'
| [\u0CC7-\u0CC8]
| [\u0CCA-\u0CCB]
| [\u0CCC-\u0CCD]
| [\u0CD5-\u0CD6]
| [\u0CE6-\u0CEF]
| [\u0D02-\u0D03]
| [\u0D3E-\u0D40]
| [\u0D41-\u0D43]
| [\u0D46-\u0D48]
| [\u0D4A-\u0D4C]
| '\u0D4D'
| '\u0D57'
| [\u0D66-\u0D6F]
| [\u0D82-\u0D83]
| '\u0DCA'
| [\u0DCF-\u0DD1]
| [\u0DD2-\u0DD4]
| '\u0DD6'
| [\u0DD8-\u0DDF]
| [\u0DF2-\u0DF3]
| '\u0E31'
| [\u0E34-\u0E3A]
| [\u0E47-\u0E4E]
| [\u0E50-\u0E59]
| '\u0EB1'
| [\u0EB4-\u0EB9]
| [\u0EBB-\u0EBC]
| [\u0EC8-\u0ECD]
| [\u0ED0-\u0ED9]
| [\u0F18-\u0F19]
| [\u0F20-\u0F29]
| '\u0F35'
| '\u0F37'
| '\u0F39'
| [\u0F3E-\u0F3F]
| [\u0F71-\u0F7E]
| '\u0F7F'
| [\u0F80-\u0F84]
| [\u0F86-\u0F87]
| [\u0F90-\u0F97]
| [\u0F99-\u0FBC]
| '\u0FC6'
| '\u102C'
| [\u102D-\u1030]
| '\u1031'
| '\u1032'
| [\u1036-\u1037]
| '\u1038'
| '\u1039'
| [\u1040-\u1049]
| [\u1056-\u1057]
| [\u1058-\u1059]
| '\u135F'
| [\u1369-\u1371]
| [\u1712-\u1714]
| [\u1732-\u1734]
| [\u1752-\u1753]
| [\u1772-\u1773]
| '\u17B6'
| [\u17B7-\u17BD]
| [\u17BE-\u17C5]
| '\u17C6'
| [\u17C7-\u17C8]
| [\u17C9-\u17D3]
| '\u17DD'
| [\u17E0-\u17E9]
| [\u180B-\u180D]
| [\u1810-\u1819]
| '\u18A9'
| [\u1920-\u1922]
| [\u1923-\u1926]
| [\u1927-\u1928]
| [\u1929-\u192B]
| [\u1930-\u1931]
| '\u1932'
| [\u1933-\u1938]
| [\u1939-\u193B]
| [\u1946-\u194F]
| [\u19B0-\u19C0]
| [\u19C8-\u19C9]
| [\u19D0-\u19D9]
| [\u1A17-\u1A18]
| [\u1A19-\u1A1B]
| [\u1DC0-\u1DC3]
| [\u203F-\u2040]
| '\u2054'
| [\u20D0-\u20DC]
| '\u20E1'
| [\u20E5-\u20EB]
| [\u302A-\u302F]
| [\u3099-\u309A]
| '\uA802'
| '\uA806'
| '\uA80B'
| [\uA823-\uA824]
| [\uA825-\uA826]
| '\uA827'
| '\uFB1E'
| [\uFE00-\uFE0F]
| [\uFE20-\uFE23]
| [\uFE33-\uFE34]
| [\uFE4D-\uFE4F]
| [\uFF10-\uFF19]
| '\uFF3F';

View File

@ -0,0 +1,44 @@
parser grammar Python3Parser;
options {
tokenVocab = Python3Lexer;
}
file_input: (NEWLINE | stmt)* EOF;
funcdef: 'def' NAME parameters ':' suite;
parameters: '(' typedargslist? ')';
typedargslist: (tfpdef ('=' test)? (',' tfpdef ('=' test)?)*);
tfpdef: NAME ;
stmt: simple_stmt | compound_stmt;
simple_stmt: small_stmt NEWLINE;
small_stmt: expr_stmt | flow_stmt;
expr_stmt: testlist ( (augassign testlist) |
('=' testlist)*);//连等 加等/减等/...
augassign: ('+=' | '-=' | '*=' | '/=' | '//=' | '%=' );
flow_stmt: break_stmt | continue_stmt | return_stmt;
break_stmt: 'break';
continue_stmt: 'continue';
return_stmt: 'return' (testlist)?;
compound_stmt: if_stmt | while_stmt | funcdef ;
if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ('else' ':' suite)?;
while_stmt: 'while' test ':' suite;
suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT;
test: or_test ;
or_test: and_test ('or' and_test)*;
and_test: not_test ('and' not_test)*;
not_test: 'not' not_test | comparison;
comparison: arith_expr (comp_op arith_expr)*;
comp_op: '<'|'>'|'=='|'>='|'<=' | '!=';
arith_expr: term (addorsub_op term)*;
addorsub_op: '+'|'-';
term: factor (muldivmod_op factor)*;
muldivmod_op: '*'|'/'|'//'|'%';
factor: ('+'|'-') factor | atom_expr;
atom_expr: atom trailer?;
trailer: '(' (arglist)? ')' ;
atom: (NAME | NUMBER | STRING+| 'None' | 'True' | 'False' | ('(' test ')'));
testlist: test (',' test)* (',')?;//算式 eg a,b a a+b
arglist: argument (',' argument)* (',')?;
argument: ( test |
test '=' test );

Binary file not shown.

13
resources/gen.sh Executable file
View File

@ -0,0 +1,13 @@
#!/bin/bash
cd $(dirname $0)
antlr4 -no-listener -visitor -Dlanguage=Cpp Python3Lexer.g4 Python3Parser.g4 -o "../generated"
###
#
# If you do no want to do the bonus of
# "Supporting More Grammar of Python",
# You do no need to understand this file currently.
#
###

1
src/Evalvisitor.cpp Normal file
View File

@ -0,0 +1 @@
#include "Evalvisitor.h"

14
src/Evalvisitor.h Normal file
View File

@ -0,0 +1,14 @@
#pragma once
#ifndef PYTHON_INTERPRETER_EVALVISITOR_H
#define PYTHON_INTERPRETER_EVALVISITOR_H
#include "Python3ParserBaseVisitor.h"
class EvalVisitor : public Python3ParserBaseVisitor {
// TODO: override all methods of Python3ParserBaseVisitor
};
#endif//PYTHON_INTERPRETER_EVALVISITOR_H

20
src/main.cpp Normal file
View File

@ -0,0 +1,20 @@
#include "Evalvisitor.h"
#include "Python3Lexer.h"
#include "Python3Parser.h"
#include "antlr4-runtime.h"
#include <iostream>
using namespace antlr4;
// TODO: regenerating files in directory named "generated" is dangerous.
// if you really need to regenerate,please ask TA for help.
int main(int argc, const char *argv[]) {
// TODO: please don't modify the code below the construction of ifs if you want to use visitor mode
ANTLRInputStream input(std::cin);
Python3Lexer lexer(&input);
CommonTokenStream tokens(&lexer);
tokens.fill();
Python3Parser parser(&tokens);
tree::ParseTree *tree = parser.file_input();
EvalVisitor visitor;
visitor.visit(tree);
return 0;
}

View File

@ -0,0 +1,2 @@
#WELCOME
#HAVE A GOOD DAY!

View File

View File

@ -0,0 +1,2 @@
#Hello, World!
print("Hello, World!")

View File

@ -0,0 +1 @@
Hello, World!

View File

@ -0,0 +1,4 @@
#Function Test
def foo():
return
foo()

View File

View File

@ -0,0 +1,7 @@
#Function Test
def foo(a):
print(a)
i = 0
while i < 10:
foo(i)
i += 1

View File

@ -0,0 +1,10 @@
0
1
2
3
4
5
6
7
8
9

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,80 @@
#Pollard Rho
def quick_power(x , y , p) :
ret = 1
while y != 0 :
if y % 2 == 1 :
ret *= x
ret %= p
x *= x
x %= p
y //= 2
return ret
def miller_rabin(x , n) :
cnt = 0
m = n - 1
while m % 2 == 0 :
cnt += 1
m //= 2
x = quick_power(x , m , n)
if x == 1 : return True
while cnt :
cnt -= 1
if x == 1 : return False
if x == n - 1 : return True
x *= x
x %= n
return x == 1
def is_prime(x) :
if x == 2 or x == 3 or x == 5 or x == 7 or x == 11 or x == 13 or x == 17 or x == 19 or x == 23 or x == 29 or x == 31 or x == 37 : return True
if x == 1 or x % 2 == 0 : return False
i = 2
while i <= 37 :
if not miller_rabin(i , x) : return False
i += 1
return True
def gcd(x , y) :
if y == 0 : return x
return gcd(y , x % y)
def F(n , p , c) : return (n * n + c) % p
seed = 19260817
def rand() :
seed += seed * 131072
seed += seed // 32
seed += seed * 4096
seed %= 4294967296
return seed
def random(n) : return rand() % n
def iabs(x) :
if x >= 0 : return x
else : return -x
def pollard_rho(n) :
#print ("try" , n)
if n == 1 : return
if is_prime(n) :
print(n)
return
while True :
c , p = random(n - 1) + 1 , random(n - 1) + 1
q = F(p , n , c)
while p != q :
g = gcd(iabs(p - q) , n)
if g != 1 and g != n :
pollard_rho(g)
pollard_rho(n // g)
return
p , q = F(p , n , c) , F(F(q , n , c) , n , c)
pollard_rho(998244352)
print()
pollard_rho(809172)
print()
pollard_rho(151299083768042202434037960)

View File

@ -0,0 +1,48 @@
7
2
2
2
2
2
2
2
2
2
17
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
19
2
3
3
13
13
7
19
2
2
2
23
7
3
5
13
17
97
19260817
998244353

View File

@ -0,0 +1,4 @@
#Print Test
print(65536)
print(True)
print(None)

View File

@ -0,0 +1,3 @@
65536
True
None

View File

@ -0,0 +1,6 @@
#Variable Test
a = 1
a = "WELCOME!"
#a = 1
print(a)

View File

@ -0,0 +1 @@
WELCOME!

View File

@ -0,0 +1,5 @@
#Upper Case and Lower Case
a = 1
A = True
b = A
print(b)

View File

@ -0,0 +1 @@
True

View File

@ -0,0 +1,3 @@
#Simple Evaluation
print(1 + 1) #Love
print(1+1) #Hate

View File

@ -0,0 +1,2 @@
2
2

View File

@ -0,0 +1,10 @@
#Comparision Test
two = 0 + 1 * 2
three = two + 1
print(two < three)
print(two > three)
print(two <= three)
print(two >= three)
print(two == three)
print(two != three)

View File

@ -0,0 +1,6 @@
True
False
True
False
False
True

View File

@ -0,0 +1,10 @@
#String Operation Test
Hello = "Hello, "
World = "World!"
print(Hello + World)
Hello *= 3
print(Hello + "is there anybody in there?")
cmp = Hello <= World
print(cmp)
print(not cmp)

View File

@ -0,0 +1,4 @@
Hello, World!
Hello, Hello, Hello, is there anybody in there?
True
False

View File

@ -0,0 +1,9 @@
#If Statement
a = 1
b = 2
if a < b:
print(b)
# elif a > b:
# print(a)
# else:
# print("equal")

View File

@ -0,0 +1 @@
2

View File

@ -0,0 +1,5 @@
#While Statement Test
i = 0
while i < 10:
print("**********")
i += 1

View File

@ -0,0 +1,10 @@
**********
**********
**********
**********
**********
**********
**********
**********
**********
**********

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,6 @@
a = 727163396536672147237536792146809584216561293147885917129304736948681888594699740328921459596563307503306479927533044845800920545173993526406911496835052296419079174243015381721052295212113123967426582843255028076408123650471707936677888716139800581873850772260583992029089018862273043353508015315747555075008366785387327493941180909978546360738165360043633833477449232176308537827285416164624306323185443896501773322595714391146401584212232059565284019997355136567183479372011251467111228184620440973736645234035352852488236151844342089128547669409048854944812381280072722984028022249074050035328268815034305789687785497042781357533475746053805750169706942913258653767870367404342246315362896701886764739037810968242587392232802521333902154049502859788709735930263048858099760372657373192905470223537405358576609201384000706947784895535580328314903750565058037892669347046102098763926166709347135606069303207465229364674311190494005517588044807517394606505944579070090645477938528678237089261243550409648202936747475906456923636637541395783751395122696842786151138084863206118326048426380547882334962679652222996215878968697319423015815075632195554266727964910544013681853013210500804102973028003968651605472306933165930379297951135030371363792126354864957641437172830598394070617831075816106255277163714986371923721723294405341441765216861279220816043214726628950874265993781324914488890045877931202741409717114679864007843703205221688285226428167305518287935436222543177255712199668590154603230637831076871568783785273391755253682449360873931041270721715429095363091049552465946279036459880872481773055445653118596599346016557940262852009335025120188605199760145007443054930292095054287236935932967103303354560134756369024603918868416785686975362007539363507386877159916868103629295509439094403685867960103071902402909682826491846599326647719587087625205325960038680813147059210438325025915328434620699411272893568059770824242328479362623428116066366835843253704467822847520369593384833664982345803883282219377735972510075509761779670937551030738928588856294242302729854406640446808391260236240351379459987718892747070131573634260070035792297025118354327801599145447265731128719375458875442999142498472015899586606705786402155997037026592922611723699867520792536286520518647310795787460441586301582393066812606390598668259542798567028933704723870577017862050898303838390975929756874977403506236779896093982546350266641208667304175838272992951588873191299241179585942183074506108485247587627279290509083642254400619124996243997987584305903444479611876907596764774694599964196743951822986742283153278712799037644693179716661264750308769315518328445626409177194266175065201245094799853219501909081211808593798324897587404908904704514973454389254893999952712705351582988065665951635033920523687896465101066131102129355340025582403807163960123515919079954934135342549874192113428722713637454556262640821028837960404547642209611956734870400853841023576183504770564072102791170738334230309403473839472133746595588444226605128076823167226570818474923524840736085376678785851900585397117501362004010632750143914526806011839094849279084625746189206351882638494844928680042786952055831718758721558612695702577200565017850755082385922841011011198106365934015510956457561631751791001979096993750850504662427085543638356305816818181099136638843630427206853583267525885713345908273691403168580695014582125351440441931994268235655367033953509601975043323590881341033642347069354483411071165492074544511966135611711517952707526672267644173471851703723650779468717741180805297015935496815669316395102104148550674176351876180218588687415490851792526374761359843067054851751632173080482351853693890301700181212211781095766537609776734049218250703542641231183263927373917154363606029483986314615018500029473478193606628107211034445045306862576400241086711700664073541496930580387509136682204503361945463213660057265888768436856039123745187972611485316285959146300276887946668759420239518787579012558754730597134204453638008163143475474079232098574529814028287100794594433442960126612393179007456223782402673105000540082624648392244019056658537276060190956411062795028115488063793298039523488784403283563565054840874744388685820174258189862860732094942493714653036254380043617544644693340159358149103734256179945203655334429595078852167152234209538730464652253649472003550334905190952928793213585812020890838549957921333690741314050881276386829261577614577936921103718509675662049048734031699587541380962303671663981300113511027723759462004460158828131367592647986094589197774263576249281891463839654110386478381505500338556300613309257718443444915137388169233922396938590618666843106263275713969125535810409845332193150906894728538089824829894407358373448549557329166039087728093787619814665258692486687383447885723292549337930403883447530145944192803444122852987235515809666001661950553694515984155056319941075695883858977598787324130
b = -2728335966475738414638470897802654721830844498804654499232688793168948877836832372957859299515193411497821356527025841316850619720266012203528889765714277355275526832653655130573971317354566354604007470439509321827339712364513299657107870509610346731757304819213640378622426969056786082376089230037104894944845156845707740592259570647766413246725561710348810320001660618408132837650416371556411927083840221859837888727563030489989478165952214823626846703029856914078879950159475270709762787784979721716442654122447021943567979492172853921129748189338427769062196734091217841069756015445832575940012849640255094845858628802172563667783861818535076331084365989485423350424305415408898530724999874046350929641674368931581274525834129539469123479278432563484911819590634633778491725260698775995410602983580451600116677860374831533373000565257427882721026171118111693774266486278772101482435244566773945585692348016207404235989843158523880526588509585584999087794632844696931070535048736678562326377368132840866339031307722874370699711052877408623704558633519672776745412272855314437985854083991614729594846921090497465717777550222804143770503705549621014413577194776781268891216427974293645298572588157654192744204852445199595961334582352164952933343090080039080258979494086448099036252981936207745070741362704134764770425486138326581727554994297303080598157089038301571432930323314195199050429890200134845603885782820983980102454564318520338937391430405781198967484970253611219190318345474213884979970505316257623877473547618437117256493492480567759909501285757955642810529465134261824405102389968591094559766425442936695962820186096866540578751755286751064440375568217024754377379535375568008539897362791901095819017624403995665895941679084289170673859630430168399170619041297211387630565668353004917990661086689355777197310799049057973626104864493342643409266516104307836508147892312431219181763806093225536990460607568742068154138804713762849286174558858382072948439824912995811760738325801437110829038770909911701772819977392581421853817950042366477814840843377273290876130622260070373260259262140963631821040486474841030732148037663667279804017395874073287873169900406557770836474978025295168193404213957987542188195280878349435621589971844779306604992553140439126858646314632807328505433044220909691517776909462192867257290245869886944611123958564856510552746606007197197096070692743927733941305677099339714136869992549313848501792822015589004432720557248975963038474272168184090748616140292311716114729891569824320728349810485212496433114398729434166576985666888079681582487277151234070708373768016289244632509637291047687239902505446919930334724389911258190570388136097638111501373616433611532110808940299052446147253916057712896555041525917752357699847017174750293880854193332147114250074465490289045195393355945078418544356481853741571206946325724727780578729483970100824060108442086623922215451195644160541914284143070808200626090169212683737088945049457570314400859474779475574603600861239981458267935385230407152164238737060133927394843732038176812145398831125269433694984467045424553903781972786042870075382793819424446018261001810487769993634676992561268658866018152555035099249050837435984116995283945337131366218760888648851296855731911013065086620530959183047254511340669821549890094335067130233390269838244081829650045607816361152028954240623528023661115700183026439346886656601345734995879061654832821773725592840703488021608756634464862314204203696655246668694545613902776337665816927523004830924249109846457087157417327218693356239627890743342231674119597953974774517455329950672939794573613199015589189775664077499188337131550790656942191675879578480792839552678112803283727406559410019764001813820573552682036164559215562417548585811146236646662235398519647899719493695300777206841770368910218000383742116034796424954122547222831954897120663920651966651981551092225894417876855675428354087625742474087610451477424804021715083333968186129705932779416755445769600875647814881033863678973811698774522547042440714254259065869463614061539172256615583978383653317337771050522365573959493569680321882874520727954676635199826785518703987748007596534658239449186140186652615799673175463803080500705007437603437938160210334737008109880915042889575064826311073743627798390886067077842884633743331752493787698609057227503594520538245903937247567534539373230453599641571756073154716024466105498131550379750136462477941988881730046244586205852920630721821811421548701418984055555647162132460876929488169602324707055114362030972060005823264733919730204217861607887961400668
print(a + b)
print(a - b)
print(a * b)
print(a // b)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,7 @@
a = 2327172523254280291491780320009813040562331873848593404228468116197804163098426504528275058946195015747969161282963700483481231951844173762305235605692615928470581528618214926199824845837816647697117137806852578792598168176995908534418772282090426023017035685707623678178655903702683978229307371540153695279189663226241360101143392217637710357212511862915901689206296108196048016067315755207408356507705981928114544577712954136260708543326776891895085149814099767368896853398041640397484125300545889090022935107235097969185914428751707783871730619857157709011601411821176078583526771214893713751165924047163670999667473480333062232649997191917084827391171866427670585135579561979852398381605692948156777179861157905411720005940649159987430483235263903049097096023565998787438712518162696959295255780149914218796879628143433881515133219558101516883256921455693447469946545728369925871904189093226459103773344624554005624695262750513974382399560275592470009218230028779540156380828928749466564733009130501364359306644691431328404019585718906717852684155879772121599286323903725936727562037346990670549424647813433543547064691765828768989933873888621468887085328423629842039194396721569273871787761903083705076121957990603830482635096359878906435090057026265997295867310726421996166643732479935605561724109232246872343478760544844914836908672719102957360219905861733606642590276560756268278222176673472428637987989201205592523903654345849599376775364237096727487457214856839520058579279999734112605838266664966965882630710122409360086839229769135251518158519021115652685277027519426367468353862018762048828977582345953086489436920619936178442953200897518988831215142779039619474917454284367847702121473730346221615532932527243584107267729446938932481535592810628596301341789457004167048872551815815600850238731042709236255351422815274956715469121334570762935191748185285609953220716305192568043283724470609903347517598388056522688250307216750476718672945732820992301476392587600534160879286108130954950893866319848244208759583550835229761439485113746693626904134050070659676739845236896421949072741240119881876897691571458735145564248509233422531427388727357592398638536770502167250639532831229731484966909282502450144818377432065343909787027272175463972986818455585294969466281796621335673409573186568336268194186706829762262013896744309450194628430459168785472829107513969780725153982425273406421359265941187310586198237688500197130694823205793909849031211894008584813831424150516331748397838227367433508847931054854303755317457304783424420209936822622877378581334510326589336323511008145056432273432471058861004630481983060496777345952371763132605118858981253581172517397766672044295520498902758599660608726600117411380268785046858198422331917758551825020079252147433747905854749513184036638077534528945561832400133039900212221643965409012862473926932192973478964179067598372296849506736392566299824196395273768690238777356584374313751981087474104758920577990207151759703798060534722366406878253957219836480194437516346399606245674430587957286592072038237139608338310268937110617385759358072075825715755436042405740295158837451621559220593876575881993947831913894884141368209601261758673177321904501931455266612004309965837565795528053644002171581825887617004928757665312393295599809223479444678001490937441068134757892402636680177477003899358421764092386019999072724577018024702667586012385594485398972049085803140486749337893967114242920929491925168976552405239321395308246441582092159144667623459477782008001957509999958537763807015379672914381597645164654997440505168995753357387112455277556490114642490622514842579448901563441816300222837762788074720698371350098034994223087328851879484448564814312760847464323800945147023875139638871491842461185908011162721062565060324381004001676536174751408920137793577111690263741386861306420218229384320073331972080710948321199368011685091804407720667388059827708598793586449708590529794714385970941166511585214812381175475982710264258225944737564853890846789585446160874250295101677448696279361283434969663065388215640113117355461495238045773663498583699045637145415009939034199744264741672942506758118588990130221532402791733214291301833674516973924705293059427568942548721563059482960169485051645155110913608066935385084707676083714072283767321938866427809225167548383486074446199423822260278340003826446101260021954093487824248502264174928080800606939763216342695576786730107873164740782911519260653253942616640748338009021074742852402934425804580868670627912402119082531617598358900034108203585098308382323351837197614828915305379264043608627591028594692858681680125267787761251914819935558899380227717528509340550317086637892700700572911203637716800212647770667537000029122237791744526227231320608274998451430085408932181046271713024886594182191571888981636515146835950733174768700624102
b = 6280922546047090590890301874984192569470847755509698790994597674981954736934164838262493641343818816633873038011889934329228781460457107756538743348214968041418319443653860431101619881318369344267553985911056166661006665230865259628943965569748439354023980854854806861174696974301380663559863774464177901487299282200640161497914857010456214368023175609740071852442575833711932947079976799681042706099068904281131652764741735579041683164102579046363227577869923651982694367646412474611092671078653355591457709997497283513122366817139958299760527411868000615629392375996292239302799855539786906015796057642311266251876966784346271740130730234017295172990869196072793005241179926130773831154719750996130465370615196566092655964249698274560190916017331954068177999301139461762389660490811172148998201699316921854674728386460315689810649431621743276446559554662063733823473324148795531247304723359237353657060804535727351146612780164783303173842611633953164343621086580916879486161468284087557138987589778622776628505131310574503040570929841933748551685478668462148359056521610912456480026167595994845677166476690215582869590879458485594678298578581660784977981826369516229132255031861989401293030505678561172432164904172932925828095469253972222976576427541459200536359467655137934563470101520737671098529240378577865162639584033292275829577096321593194141425260630593210521354764044479343420661782635840761351630344730539075459763066967060500957880247467617348847977742950339021598438740901684132332826897950701690786278774350297738878747323099908839658779932399052910296710017248964407244366525032249928090733987216284757847498699405128917767852024386152050229356854978313759875187256602897007335990631208846649805909475997326929322804197414819625768729734438960885236572307345245682963251313727895374492301146907049659135299709856739460691234729186167463239469381146333115332050077443954627074459559797934368680673123441949261423236127207308931547710231432134128215335760075681172279435293600850293189114733589492308720088585438410888831137365746038597919862486191138580944431330497739158532994828173285895989560989933062936419788110719975604682363922378552739657138043284679427370993939538054094601593695482810643507799124677479921331056017052348947077541815798382193012083929565018072433944077570115986334559552058267913537918514190442499455433097801024847124301979475863443434541722293877432217192686120077594155711216662420933262302405943158357477785154255505744616243918254070403036121213478664513864804910950739659829462662860130741502988867936467401517028752041885899455522787622781176398642848137967226021189996261601506590097352139579090682472658874377857552027527061396422245934692174891405637771687439527314149560918523650752269039700397260836249761898424565885006198833337258026147125943998689677736210292538398357659917656147707774575207138788416516914292983517889785066584511797774646227272568008238646086620643851860973719343329160873917718351522093462884009225945390682440778701341568637278424726224896923394569824848554137387716368452381827782071282200987953998117038433670063994101600021740134461660160970105192286952543872992956670662411516834531098884645507196337935655468719240533053688550774007344690789108890410537104056869389661312822139858083711034245922356338387418822154961774431682484189195002144644402969594161328826129273595136356442335246733115613522286061516871000274268594188752411873984425389385852881807597951714171137749882412291640120301605499272602731458756784068699293487085809820928738308765848113348629535633399807893984065201641255792325138351239597725466876710586831058340726926820044110299253184897038805889423417652362546564443442064510888604407691841903914718689203340804037583344731721880094361214888170773029245031823571638242437954672984866923220469786541747824658259942556954807810143032615236253210096441755941293571081975610680874797590385678009096687890521147912004523507580507033370848508749228161833456937532632819318255441618525809581899569272331652498474323577255901758380535282266256338440328624254796356122240796911399244105466506508785843413499313595666318929997872168452879528843353652547394996583658636934106777279314693376383484044831388260227562143642974512801798839449510883985856725793657064575062391220097067228245020454740177440061199249630602655864648328278576508726370168719071840760013870811585642360328621182098654672898737337078960964226160135743081058483929402892165243891121007721839572098828831815119708634888538915006477133954506702528558058836601884254715319670556452564900475659410058085397007339500259215343357083345618391682659132229983223102854019841118641910068980342547304772315303579206231860047527454397233634630182985758552104299331954272103463500881533141112048420635067305653804555791033233069663011597376479962600905832908743670323793539092090459597845158676234891923875408699116
print(a + b)
print(a - b)
print(a * b)
print(a // b)
print(a % b)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,7 @@
a = -877410326426734819970023972544933127206285892324561107129435942507300984791637637391413805170002604470584177144742945655268459909494272074612768035725716719796538624535663657263562662838524411079984060809893273205863998113804949973488029120490002168122546772391611760917420543884361093253616521635894772379734471729827218656432395424009809107846506471064256377585098089767330043770265839374659918795229376222930156994459886485814125425663821341643274873547713208811073518747610113464352724525154965434912713924681440312981992457812006832974438209886705662400919182121871944545809360062053710719490386081987797583721212844460173272073253774240008723021843093502864304794604912455144576450451964631377850775769171426235120956276683106004250569771499077844543327439533082132819648572795090778613716851332182332710542763440780114426103284615528674220398101017561845116840893724421336036483835251939215490908197298818392023553490468226879585428553677055433710173877050893939938812077934912650858273928705179509951874259717143748048865841070165371921486613995588166603435510683105996918633417714616160692541003798448542573033109423000185624130407182599648542406063402958258607852463515303613507393556495527797931068436415065879076672022677662603583225352907907742142240958021713806943707837476039082300463917310895411250058566323875649352947732571877099273638148487521503365139394209120715092104617540188819999135368963208376251072962235658660831533378513201280677175560884229102261966962886058083245282079130304781567347333065456874384645456627224453190427748604721753848820881025099339175938830718229441313690430882108788551646563552600200787497905642762093934834909159106892471677222921508366008980944488750994141236476155660822077373550333165718368982061055898827585365556875649696262175208343635416899608335592106828857402173510520937612903549893553156816864751719197943522586460599742055472012409763699601614874441115611875954961958790069502419157637603724734828582494959434696118128544494180113964201987712334519306771802361774312970676740011822755045515824743757025492492523147220301855355613669312781904949963934125466961688131732795769154328314367311785645470078841757964101439264994338457420568099504479592100982956086122855904193788340390853569179462487398463266985844690699657787771909375724105933636142603848307989068330104118501905398691884964987783487275777996709745845675880494095056285400936854874111564721017740738671447332844722028869191921827135791266914090361150697754732293108862615869402482653097372311759916169212385497563773562872723990914087157252720844313524973054101689671028181485147037365429193757708878854460434782091201695554072595485451943663473629902372659282769557754766675487842777437987475348015547884182159078698364875440272148095259457694698419142977922542854000239047634472641706370360530930295691476290570818621952638548969982736694809462154662400952086983560229603822441093057936285452125159827267994537898551460320275368551842982158105788903974408564306445728436388484694324233121559790820473962152893226338714936681761559943148588935421799227028148851272432069210960956870133715279132154048308749902980000844079249385553632882519520128904769224234981920729466744622069381303335900621956388954517247311745197150193065771758000204011905339395464362088047359287706932305227350666765549392507996650458912216943685306126042992254387416117361081528527808530544042747035228782385456812173707335575692721460497218932013779267123704729306808284619218266061354445621098610119167381445172136666422544703565495169970638387370283193294052068356463458930241497433297678219415296708024576563290009067986705405812717105255721737432490476236653347980712456852388815249170848638389773059393702527367033205246727624140138732955465568209086665645012380266762618187577192569442338071600273677678285157300120332383062058889562075324317354122568343613641986468945719096109415434818465861667110561092697413904073530566390130741278625801979308418725049666608208441536117277673107614430504963650473431548955784487299588245331798355519018023389727693302506078880756484052686151149268289683253910146734109895641725061075767382136412735298009342347776188891478042992843437717877825760476571073748705171049143536847046785185585076160111075910904854078573003957172393669440859667080175727825982079431712983447645339511522981843385944236434697158918182285488993294929165768943559529800941761427214933058195986955627634760083480373735683608804475814502118310085372595485934821443862105112702628801792402647768807306055102328774238186061060628485199474303091031644353120405767579809819306288
b = -776637715715752494744785878179729627251387037202437735180528037540314337351391314967020791815101235322649249085312295035682815020234763104309545675485230773766495154551919939061504988711845935359682944294368960920969809827220891071422263453665346829671677189888576646873371024449807608610753309935729977718902168739152219048688604815618252795069390033479386588842698055911255300377156599802993468529630447069494811223950382921187760526072414302420229994050961827501048330475337054693841041789565160099302339946794045514391430785958959445000940720511331733171151804447470116273442383082079311518178512480060500291976268196891528310261461928687396252007480105840220400068013553927348920575777024007472373285646041073761584678187596481044300339347892510288990962914229519408493173672862223251521655154944744757252825280292031278300912889484860419982116746586200624227229135565188185649942943552788454554094221425681550687507311194094339152783856474900750181726646432417956446227518266049179734200355650334494257510973815954925569798572838035937491857355774273907543992368424736152887183587531113507890527990412910710501990778878512704625460877125096309009007275100499949005119516787033810413391407797159385617370713609963467882766938742082912792301327967090324392923116060813058838284126227691564443501053471423513253863138947820326199286269222587686538885027903683776370538808905172571356095715649252294848865832899663802380717032347652518973206083654823264652986190530970858547886312363645811286935944328835320289995653642355296876015158540915261312365254874103092490921537331453172850788957394824113082865794520657488718884946956750488916449657438947768949169938100485908558891429529904878570025273485436983504604618427154039698761036808765973264742894373851584708448011423464152603731291733679710375273033556597232859144059028447126869138072961612659613106465684432265732926997937420301592095131085758337198775844085312413361881339934576516334808489008921531919211217526335510930551877102862308860496468377583864533856729239505398005308349407692080129523864695122284437826953221762346744185185898126120700692669635899941295555932273040409262097490619166118181814507669537945977228415544984143577433342823579482893923219931794483580604837874761868256656786917379011903179805896319905588915815494792855417781614085016898476793826974768910096763782284627689832646610737217140975998296946919104163371683206498607969462239202132292859766114191651060510571091322369550952794167703240365502629544956047108661569168575036174295439362662371679755475468666764447570751837602363465860797898295504087518850145437892582930822118586990675418690216425595261248592213262821512304186561731273398457048824611120062554743618313034338497619196877076621589112622970598691346539625499676435298605254520190468195418025215743040238916476810903783125712442720179304973989089600035254070432764647327465868793073421002850285370599182869795037750778103223903706412155638044774566275699632717981441166958993572010050209266717685093726476924655614813520844577544869597342305949913693965255481875430481588955596874833376363409728023494505017992388915239611229822507954597133879503238144773578300217849660199572420170684652868553538398739672323538846698132279420464548593019742907834177520729398463763684653155058497171444348969246622535164640040824167284587313570544580120801828899988090753584843904307564354573240074241674901973951304586541108804155956365273749269723192454613282437330205009161013582402722007031925530257961512155089276855062750013122273590268538036930185203540695967885299334679391907583262571834579593017016146224538352745064914026081838424841605776083430084992861794710259580346100192706200929427620197010523429128947895877220138621624680805177114652453633079165924129684219754885518647902594235957978422911582753963642907561049488923806560675875344688112592942939870222349759074296894396074500246672711813555578503311019170606943341486874802155570554918193470641993258424150784811030389923391141941307508329315110862931060228265241275889808785602867711460148473297518432030833677875241151807790138769096306022037544896577905396321143824935482886483645278671580945743731694602139494682306872577255587695305306376332647699751038459944867616588077883625936900351586200733694410273855667008598313879480502455125325866768386332752227442588608603678754640270331195602742445033240688343352106678281381444415419216195156507609397674404548568792731923627863120244139365342728796769263667302084227661434790399361600399
print(a + b)
print(a - b)
print(a * b)
print(a // b)
print(a % b)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,7 @@
a = -629526331197277938750699965053356101081958100286999783726864679227778190550183575976659564151832898697012383482836818019079067868720565552652034797751210278634434276167433698059224892215842986804263889816775984992363907853270929986926372201652406183302645285976568194814128628187556173625019877129307270302529176535092792486723836219438959849133916747888001268144230638131324180008742927035635309400392189891900635940748350228909758153886120865471027744104144518238883078084248594127731373037826478739205510070214093508653210583285080407643499893435345070818079493913254803057087250778062768900827628944655347637830611207917483756364996867986527156952681418710810355806896696929278001916321720488459884972986211793442073576182739599403176432517530334914157644559753077684438379921290329276954500301580563379514370955910771170565292912212869242008580224487064538299384533939746554715745431685214072893404441851282859888516139830750718088624402672939606057793043855691101099092957530251578752146049191974545492656436693711100632646930878912232282759417913110976731510884248880849618403796478233813320137637425466638362938925489543357677228006992776151825647780619730886651332892626913083515107611506107595673301822052984928006542835513174592758559230907932232615372607027412136678819585426325075735132990298619753251056263921019230512119371784024748918529578667169263634450801523240092060297519527066160455787331415451080932123025993937772946616760389786198681576046617946612162569829825410757186562519067775478000847613495918678775633702003057701226264714897756282869697967901264224725753495467424048411484169142183244555092697830364605082532894419747328681781414995186762873018233756623822794288261006103718952866958184785496598294017470251560844657313000172244034170264282658449360609721897154736468009651466120440677002225703641595541706230768499186239701358528567128746796515165680349660885409948564730434900493898844588616299842684127817788242088796200917294984953632491902191238041338894797474538988120375014129809274926264577920961223228252014162902867365422027775621407025253396040556521601955210513204754764650010620192358000442545429652310993632811960539179984540820851774914073679766816106191134197748861691832597102916687125433683127999583690053378106446206375315988467625786331142764225299216027822021665896575099176410171374965040669672484175892947024796928028967293378147221703878982723179720223783951029933407537113265748838549201012244537300939400466443926872984288880490686406788331789093957632495471062216039575225359536938208141456609688843781724568073047650376306807350587526589571653828038919463085416142655642605837944156416715420518525085895469487068783549632775093749408095209064066582789195896382554088507269595978703323079088757673804192996504129461293809707283314477569737444199810468977173878136158108707512947991258081833578983698909536677814484591895590915994414766744704451387920362205469759824914890531085886728422778520417142140720498808807451822450217172277808649236165633539020169525934322415885616852433607093911713555395427416938176712951511962509769504684112090381789484057391620515033287952098064802091457432425586420069965835302961404686647727225450300991747209931527792412955772110941347697575126502047138848131656534578759458182559678902281092352740473267964634777061456843275760362837797372286320316814402732899819301153040751363874877518566140521323099063795948017445482664749278587371434211143130997065191445013419719692297119484626769923512496741598271598588927670715837487821036365299469404162201593793097651120764023741435374240373256171750712978532535676043048022624512492767006170165476940938909750121514120916336869334278737860190631729742240468965652537458625621813971956272129999992369122321444854423749062532980368562665528661623530835778243885243593859619947071529682872398230211117279798719992673564107745918251420197837333910779405584447657258106834004187300210678219529169880352336262463599850971693139152981674052267733008023312306570969933031690613230459869805734304946914631722966233151323187718453260852549172921409757420005948139045130109057025520045381232085613404413149189517460485295426076318393954512662258422969368547276737512884737784216061897171396826086113219821360605401652677197661975811985299164539596566864912355266558819579357561650136639686644457651531322666316339354289490180664759445333008341303869352787981629562555159963166144905785469327928780453272144618793586615106677647815686554612009599625421994972788596007687847751492817955580913067612815256781117137634147041408696726522146688250164896441968521113732407399209340634958894624248714531486776025536609702477455238759623249212118729674955297972796412054559283024572561767430007727939628240689172469898244064848961588175
b = -963822197278926137773893675056084619436336477537198360236751707558361908265142188273158959631349235941161413797440315668789839246899658425471033238191660118366980527409960067183933756668374818933419975657280806401206554448538692615920388676191773875342463514730696477038913813165259156757888041655809376510923007712825102857185174183996042804472128671328426440092663832388189477107976352683196754359571330372873766087026735122778648097748915669842310943381604583712615514133422300576819132169507462721756406787118173066808735591877728238494432438694800247719666110422344755419848164518698886875334985662749205808009317375028860178222822960576108543436746607613126151612188494844070447871832018936924862990298270159103141408082322122658468807737290104003000206134204656558897249582754648983326632421872035277511562055058446237053931146464172367862164719489971077222862587207842294598958943417298892187133470660139776619117930482909861465927497544078604379507807606306385997895021288859451676962262423077877894878684998256699392005449960624869492057718477388274328701223076108526406424592194913711565690500215670588495824832727262333245905397616995040831115971086549471650384127033450374236097374945146722410176340598847932291235151034828506335457290925416482416553421785643541144896828175098830695461772213392816863740702825038980460717243006834727712722531772652713858111143963804083801741271915787593066335177681438788902887685633063668534903249906508756496095691169417781383914546391508903512630048726235828341138344602806592743639690532596314142323620737971953607338026746546712120178563105993715779375423282123990515110176610011175622908746569020124189976845150648948657847549885318523457583994232980358093335999598279607638729647991291140377070475448005378741150470825099694417960688020639422972718858285799276188838743110602677371226638861047118152943723244781990247646870266863400742463319504143323341566012832065239815750035116283978035762126091734335876397577468729019025928879454174599686232943391656055820253525316453796686073355620221126725181394972377133481717466051214657805334049698268046105736898350851625503032864759710962532528933880744041534395463432543196462037271307442474224953977523971758091479715875086797463381835617727147672082588367927740739226117653710427068087228609724076196366907502734368994303692995756278090593392431542893297816950504735530020345800447459833120997124991541999753620396479009022509036183391548965717551042927273366816966927272659377718535673839417890429556889603240109612843184945898041531212760402409745825635351681072318769227922174905031899518155191673299506034245560143514028925140466337367652717475139831735486666370447657541137937927233432029772699550657013199615435823058043614559454727283478585569117931250569269641649622986381994683384842135585506457508992466258129260853541834936809765100003273342145527802857655335352929698344080042194745554017404753239322860428280448241860883303521625391571236354122043601317926695571265582318231586348326226699915114385672478593387108288401024827432747970627746153226277721988439560504929709926511243050246520804097556537039635857712776056167703134920465018986247654381169218839322611423792829408068918720563103393228637719867433739222580741800281115326119473080483872151868413105844686088777019627928833756087863191900179580342888995075027046089641323208866303738648647874509950517094591730080578391011884821991760502095210398941109913916238913516143589983190335178030742267454757163209710675625503786039458069918019498377646944358629136071357292886095956791958117282187205506268247753322564717464201706070586680146799864596682035586712379166173540323203583548046305261099884265491637043249563276677125704577498808250088124284929710438299810694879625241502037294973979878968066163569862993217937088263711486654796676580462252068245659960313904106987262811308770265645140780834799817732801375184758314305777538671039718793519079097301359871651478071339516032397389698915376531428274656181445678232250888865084399408991158215053861267555812906345186545652803882318736411262179185449101661368716791783120853830249662704454366828382473558169518241542438521009209932116565377673568645459602517759968683723827452251660841076522585744639794708117388578570398361180205676908400620782029575633484334176071465895032451674053530875594218961227272640201730680711921163607149674405735033735370418795541586583878302410044180495760777064878418842600716116562584976462594852698838342932252461617738248546697722255372424227385818986589244788583979430176308564644236289782036008354684571155726548741603339865561795987491288399339760789880306386732501135559991870110976583628371317499579490026490816539420719074765584975582171306890367007116817118114729934411876684
print(a + b)
print(a - b)
print(a * b)
print(a // b)
print(a % b)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,7 @@
a = 49974897309132513220381000914249128238721977153999815848334851569872635031952524666393893213175225252520492775020879785376616024947838257664343449306447905152001993805959089968618596660214026302173361834668156358842295422078980730875825102326660941845828034803299887642336562434972721300030278318490026669665864410889557915046920890828256529369645998248413763390723679036121396910987054978497263776596307519213327906399700343956287925218818907114390001094475911424957360890780560294926662579468023289066858515542739642305034873757629719084367811820558075375745944067587879246465570260025202815018803160579692855388717125043895068926505951948592318566153332583032134039653504328258687467633255426200013704132941603564459131246477616720487963020560143583098196146992779502466213520341888507878454965897679801496633232588632393519469294048211681141610757575414467977113188011321360505177941175562550837430801284971361728192279060509238149640265516471384047299193777149085384712722550250882955859148364221976627042455225418593802932638227573965760259639666722819806872075626456431540773840414474583145174035963914595392095742886914396563969454208593960703328568057849554228105478876256452302136729882946448184836760095266038166462195501962668179173800177626367489955115424010735465459817453347612995233230849278841570366767272567230395632365154215827606477039911908077170024354396819008051334518686983942690147107189432006259832388245865159030558495269838092452451954101149524686222623405318619163891578226226788660410567923804819258186209014499249795914357618636729639863100802917961475077048575579804648685505342717578215410193501527542957175331991706492890724854736238177963320718232069775843831075894655566283958921989508636517107585369489529444711054726782019720118167104383924812326460996955920672291416057497400695720132410679221750006206730887447968726945181167317101292940168158549255804747410622583090469531400650038376668052063697076341757576747766491189088230170262212651566211632183528222160043608476080393049762078134030380569788962406794087069020059166407959260634437452918084924918892476971852662570833780455235162768348295866355388163269020136402340619392425712816377666343166197613512598467288053500295375685729606656078568547976776361043128994407837702789906995654135192098370316709235946096044410043635237744595565180204497279153527535654849772654563228409153562397346102663910602723239021326183103045418756349348714982543113129681942293564211388808024786332467813901728490180659891694697104046388904624521266506515191704452134949640403443847943562135559333461324158745394172345561758187014938663659562944108963100282896679084368050219361997690003148968982804022265603164330329496422058489859586049389758624567376996698729936124369249735477003210787740091105928997240868814626168133636733745210010338126299991676824900099391498557144155809402281454121342592074685138667224853600101381080776909337644184191943940313861054548381038464484187722755499820864487174744865705861356953540877081065585091165748053062542679217684644640590072646830622803404695536070577950565682653738550621977998050697712956943141423952128905113376728495055702360162176806841589227774214967199360983779773927332545603979018823193350549341479756591385871446162409113792971660546596035518411292359431187811620145046526340793378317035422631726607972491584496669223175483475526782625933356690599331815662181882705418268576881827648343979000702517333511060138187434720974049663531021966133998897171108733387313607741958817529087604203605237602809246714681626823692109349944121684475943992902743582423132623972566364192439220560657723115734840477161252894960054131762561710098033731760886610642832025917681896144226650716831970342610410762079596147783390641273720577980773863110450137808970255212762725293975963954011448708928729078853465042372896334191523716487110175831713945228181225230482484064892495249488538131678533907619156991450017283378767571751268611714939201196796027045916652040387084158060661174846907335479124988877924739426570015453021324086323822349773130662847087415976960423958624253722409028844153864161303937451345460570532873824627643015974602227731495733062106841163434578921346792996179139724992484494906734218887145806012199260822142636835100757175966343055423034335342628002930420364017173827490862364397854030983668133031518062398044949702498881825747366786520989016354176504552166658082979318155647960069409706121417219336087074366416269839226523277343176092199611103013254841639784262735754655879591198078242815502199982452937055451171652444266421527236971965563289400089786009157949462599616667119218850265996178373750185189037572668066585898932751544185706941674252731307388462003120050731533310513176628755338498006019487609396158421887411428371635869829695225694
b = 65762148520577713483311549977802564877352057627773300555591542831143338975544546655926981171049006546627550951453641369294225346443613703899968852676773705409317609944550414625169873834133707309855804883264546364762162546836038558183050006977657906391022898257697695009647514940625590909249149240449778165702797675238126716403889284330139548775903811767942638401729071907358210640606526363713555545801637547290707527859661933472253533088259105647789686654586754289185154097511064483542214714545965092865100480328422545581313106052925728158592967920146777227994088747983321873628229268847184583709781260258187852497995648889213177648838414680829639021893266974950124448765488983091737367160211635769048255994590429312641622569696523126101841679367097529962247455708708308897175432102957723099720136248305821060729045119269758822720910252532691659098847618011135190927129435522501939709629660135379870750179455814888970358188219137470175824506453343356853538021491206602693597759961345450952681933871645099260482620752472516666113729273342880368290246650672637013297508188908387288099946604174149579276761274916392513564513014132927650520798249713145852984781917361941000595089405058640327885094476554135324271631992528412514069145620096982284280876841821650991041067937750445189286752770835767637216362539536240631969293529162229870161621090729285637190919032640039039284941004927150959297235063376539638887890418106521403170480756130809902475116776517902810991538870743692346157450870769090748459159767609016208338838654288182489465881223952404923760594360571619748621924539079616880238030081101506670513047776005414022166008982043370747795680238877217310179778367481281391553650518012871538054595290842239055373400418729192058001749514482580442561151955335981197111747388024965445958694376279578364044105844096945768401896000673828169811702125050640352372537758640500007116286756706332254339586814840873516029160675772430198856227516346428461372636762519957821886473631012556670247166266398281044013576950497771814406845050011985493237215416386286465990011193948242385064486263664825789755718603259729323396680388813706768421678923590911075016598127972535908778923098037516685045997121297412158484388938887006525640911305770513846252201876396363842450632190174775911801563094115476793657252800389900736150667091616710612519838977748951805627275415881488105054870563305928829433467880540442155138137919330555906076651992113706904266553705098454485134015320231271386247067631142175812268212365221765840000415616724623207077970379849007434994532239244385611556743704864134146748883939732155196441895580609007902345636124528811025212572806902862719171603858794034800531848195632037228956228711890518396130196705488455535789090355055763520084208120070850407393340609593958932556468974390254160489603795435815503048444804886955731238892236968093578634345688547037908286659152165342646482082635651337998030466851971052694017789514460362951467641943550252631028158151844145553962223020971895908758703943503952794794968696892221282165490690726046873479899836674884982051864371340341449129426687182819897131483090172394334917887971159476480372776972850756370035633647946392535431234133864946235980293396065889432981236674383516737831653730217075108975631793771084339258929532149293776498384324103323843336500257106854317066715436301998254236983099945058887005662654611247518569328248241849303945244237859304343986331413617054364816043596873356313187754398117578117353563097481453464058307413010129912920980143074862426510845318520468256160877254041404534585966901570605453171834602850988903486651812396835371890912830688426496429581849564256866261717068013907586650501300032049888615590129855689237990022212475097079707931019126315351325111305688605714860568192155003678441153647634425478390677405957067039158447439217244050369971036332350897086665795465071867555031479192923228751108789996846568921965810497460559496664478961083903762432832991449980971074784882718194057138759209205748472804560279209230116818415579572223790645365595790242809679707268038833108771452988925450442314809189877894336378016790439129595561476856136113515762855191524995367384348933086223849872781017729413390480031550105934120772620306792389771165452446974038672711966778751939601511970376004114940628913390740396925977327141950496930852401278865658979663585244015962539006820544355085344965905768313611517482700886553574224462683588501112114357168257632656666170770177816411958610353425691471967068959684093980715376787723774810064126599581145803335354231283005470
print(a + b)
print(a - b)
print(a * b)
print(a // b)
print(a % b)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,6 @@
a = -94429730024920627301204494616035577821815154729554930752594793914673859721515351182006440210372845307118008705686575567016553340593076719327895253101026637785372054956545921129119177024684465851973745425614320721782322929677308317319584333176881424003709311353789226791792623299042302159998268702585698733946057187790628676866162653546621983147554188478884222973235125468760470347837776436042722697613549380650288837253416109495800300951744214043366379440404492813335512186288106704846679859976279379265922701168694676360318596147027868396943064534422479852093012256638916102537855587885265260338963779446388216866105384305722045930527085947497590196290597915028493637737979319673614405203817794349539814384527775158675761408761042405504597137840160008491210756499071152245329701084832505038714699485463526472186409916414278204449428754852230699146970334163634999308835290265282341427575980753683736875571701341069248121794434576476155002807080300310699133793964073273946758108897903531242485489728757070874988523021803847841628876474767681968829116437433150472480809688863829025391938086823381744742617170465934686413018146142601540221402943872586354984770560180357860301707112009829933344908112249247253935815447940422026854412635676923892889515115472135088101803265812711484099818255416634556186371616328875028632949431761509250842322613055474583821734050043941129868898725771090661205803664093546397371841869947394416496287192527318055784653637324101194465320703718379309290345393028212931897172224312125904736949791751271224298914877769154317146082988014335635075473352653655237952558368580080047750765982187999232672678577313121315178332941587788192339378417950968966850573564687012002169417593265684165033248396255353568073139917135886158218054807605483295420461880510543392181298526550806780277430299701712321748106573378648242054732762588231316579171395889925243669344967819658928647206493383737720887350070215542554213439509699192973866788663968454060251461179603838208727833104252145964786008162290175678399950789316081929853847002572084540870573806636864507958029429525657686425570975321872536490868042843720552321574516227554488564183233279284570985741939321688673703357016568548695409419729959822420932933871989430394352584326718542659915970053952951137796022145250367931195413264225508333945442467706800209430207248369736244957899344130028641326805731453271708872047200580078390668780636153040343640669750969314030192675436587233267508999248219843408051828242455541848173618095859906748009510887549095278503075517307121151263055080225749295400299972823376255596448955145339491367968827625638031461618260451891720611970468912857612351337639926852722597618955448793992355570390096958675749389081858538230937083138403328859871093444136453793134391815209771829060054127582512461134823320455346855182836461486266376979352393937157487293182231265644335731815856236202915851666652474040740369555262003359227532047903740822646374698490865083920289792550360290251113336848118634632220662500498638004018482094768246957621222427005363847448534096994524619294567938824608587251253107977928902782822385903822593423252578038583550265845627191615770835833588672325839080719230371347187486525256697312234647594865734891595242783433006416219522296523246128337337820696699213815435242588962435467093933173210000575759163973387898394961996822634899745353229917264583653665873701954073935036012539994485418901370701675213096501775170900458188826984104931719150040837205549054445005663913743601182766007632396613712993240865389699846415434870234350042494625089000599736868483517170747883906587605903297349534254016663555333799521002854382307156087956125878233214238846306270666580386940003235726209120453973861429867235946846137204038913162478383613131929674857902471438596613533716079496693710219233310633874241472622416514220608720140966466259337650904774907103980466053430278377508645833654704748130164339054408062688174911939289477813734518653702578971436241728275756638332202745685574142709530028674516934295328153247656988488599004273382542294535794533244942131411346733435664861425727344456005968594981862881388818352250193053322808559703797497200121128918170356883953570000408112107091795765680086041065611589852882782099600918356964606576327464059517859713951317112502337517399144935488770384082381947454550500214218427551120612558753053781948414910684403580940811503810305266048168701876374385675054823575129835079958246127243550844710292973278395875445254637925811753893239298283719185167036955061604006123505404954917386839419621487695640573368752153855153310085328719466662660404075925594900943681497937386937660699399606146996454137872376919026052004300624777319051539134500301202539834941523060657344496368628943981452558372752889923310263148377580616797404600336700838615092072481431351688568870032637739685493867942156001860877058551440967
b = 684491128739859846727757244230827007523089611409690058815030163191835333166511012678056833630535036542989672486490230517088394754001811387633799292858494173773958841061179428051757856509644156154799592972698599805675493890927688004816379788386882903065326358024540732620882560915824995699269593411634780814353230790493896365188000999075608093424874860919177848709208379760550769909036363485714669500547429375387556422151931721623913786071279012426908776000589494113857272430487337945549726010649398237648761666996601055441138264783358305483815757249575241043509300552975984530120765166651902695473133577045879046382810196282734977569613019582399850160588046686310528122502371771118975438171811908670251474530605429739149506248017931783850392889060530195322123415389688009296599574005012493048752940229787698513588849163407738561955340905690889786241012919410987627364570825247564547639811166475378140033762268002011034070011059170076064255171442752438471617565673464673262274142396615744087806649588292014792959396228564089247663488334508706062889087643286855719829706640200113983984882121778823148632826287297942033177574431832066269700929437729376952784128646106713016282619940782953286824578901636637087320196147997613027280370216802232605941704001761403294997673515986274115390339253411489220068686115317421835332428979201472583251203160882115538714457452401470105591126072261600503680015827601049892874877632753631113864000681678004287816280654629756947788667078874892832130830183530384307459649114046027535216561419144747778290322452789656295705599099186163206542719870855822177230574437695653034343341148421620049648128715607460823729075379930223210657285768847279159099039786114094042594254980178450209644689294542375593664752335660242726814613529553052185854803644379557230575060738394624722817771411044217138304700060043161881167507780908507890943892382869296772497677155392532155754805221578356569765941896362499642369493972881079439067375892977577977851067302297483725686532932346256296753456864105667359792414834189117902674590877699298519146808164701754351306545684490125992529307157024303902021273495285398259598137840052705236262419685241901742083081848028733372420104022301414531218011919756511972487821328496976227248417652214935178195799231709443388852521899383402286241166740804695157635107166539558465392812360455967636042217143499838440225099036441349034868108050941131866806114054972502628915885204708434531508581690777579610528989004331389490699140404748238734023388789338360622885786449093315238100097577989399490494166283058118055819288171392489124906261857363275962295685602988260139084588953600297996040371698537438753948324474832328448466871601705432631878773589477508656499157007677303922512786148854364430601799642026988913492848942091891899274631791150337682686826784959188655650946120994715695875306994628004060502445418395065322249008315022837772137238949875338972541278171885262133240798903563033600819577253548929977828477924712769145449712185112955896942363063372693685428725070821460776701969030313353644638799308645280850749687336064409152542045577919799090997488087527491623752989226902369050109756355249675254765291144102791600603322530869486805466732733445534542627764207284690259543762035148653883371738374973018572952985161683948010067386269124568691960142689965236815809936335048278105233143432578366651820995153135244294010117503357180412071406025861327662518739706821055729037642327141056790984376584444192072434568651396264733113606719860708820612301366300216420877398876228448691848216856113987300052490428257783299789754057866432933488192364713991188913348470729204054583378906878012124113517576456059451833172448956158852637410724030400461655569555979326584582031730585975287023741356516158428591716449679767380003277857451116512987844894370963137686362204639780013241413654457433050826402914236150554454404844612008009339414562345656630038868470491650495774864514274537468354044365641381704211060158608699118792740420671613679467894255312034124826475731705197307249446410468437542765036691965824539691084403948437466537952603766728778373168564474284428566201426946100239802849195930065528250156653255300065327301889237595012223148403567066237840585481939441664935908672094598178706125495326690405686776374729596741044585802629160159138219911020568498458330274800877790527176364974808680498683553253845430630152565640949496108909146720516542970273663518476739042201866208803769292088887791255450093744230357217309621030825211862529389976730174713093581415898556580585600368269304840855885574239471212699603803734053493946465015598968722
print(a + b)
print(a - b)
print(a * b)
print(a // b)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,6 @@
a = 20135085208337309320952448781167358959422004172273875165805296537439124904730785513621333119604898636859521849598647400451140290424486032931915733045761775152206260491629021181798296426541914825420381331460220518573996124739248251017922081894475899608093493940296395153376490931526590529323138911982444975009570681817533888045368874738680172648894907192268197494108486230224384841096757186894305732373681023629056681566513487958383490951893780890026827379154544610362749799507007008601831514822219237644078063937567040028280157278639650865271577374570871358409257847967494398432407146574045349298827133605337909365007380957605164501577324573178150132662306701544597501119355512707636849541551368514670038329712922257691069073048006136961148919619389837031098305510238316288511512885507690888684216264316782382861639808946799606805876246751233037877923859452191859453261589106872738363785986299234972999665352393329738960637919808821864005594470169726747980477141316121652745006995667703701907792428265280086685910434353283042909852108454300493153414087994043459433748234904043054793723438236147465422647968507848071632974139426250557852893173801882492551365967842420164656277838943730730930552045503024797741057170753797481889578611376164055286921893221469671422295856642016891321390797723441426814675370212123344625811453072928002484383713971946229940356935896606509793705646967583841280717144961419552223751643931671240904021480979974682338318507177058888711302723928796466261157690385447148585453201027042577293245456802435150277765706980797013565034915486614152679758491328258449895331109938443995137093045452498856640943905741825794792888208460188360169081795106620341532454478799893026903960690813207981145692552080458787186887776126648927028541977615852412686828998502641297330850475844910068143303021800622191498606193880360986997452108825318520668149115774993556483352370756286449516123732700257442043415483766906195066362390566636735327399894801080401185068673586777348134806454591574609463807494489693480351471165129362749042043969331096863618988781854543688266842092773688318888294852672453201725473371955636143257794320401251746723249414342959223771848914211148991476172439619619947349852699917552002646407107025678961185736088158265842122126655249614648293812778460280029295178958148232425393279970516385350914705698806965497010172871170232140347824402942272339906968148577451226111171904840041789775362343014850556541618474711584184319868090642215810553785342833244652534296104283630526803528035018374147793583905418426172234159436833598842429826723668450111766309901290618930837414419023706463668048327410059217846217722493121517099291704740226131169229227157196606805745239965739865101314265814080181063440491132130650156897612958864141054745396266105799809795972937503471134953237061022727124420091424429360228462993151832507235366993497593641061624750167759806362684896857111787874270140576131515309804213766648402445469026673121098368318249366319887383273215607317676304377766990077058203653059809766010877064411146886824536821574001498215647692059229668424294100750919646604273902669025965841450433827326102297759250788209274966148265007547052776027709741349010048516883089865356968420340046205932376156378758613727105364658708359734398440717821175985603823231378183116385538330932820150528577940975430231705896680983559516469955464852888718204687451293283433678357888533198478977513669882791168158292831336818203203656187129216680980216277890012840577820724493872934467092399406838881212892024464017609936012752751125163392476602273451001889579200771171776272683429544105753964389736677235633790050940354302070021915064915118107692835675870038378348893490821706305893049357205760330734322997745797216425234376877172085329319544050902477380753934954439778891867190811578536322288218014395632004233508603931111031568801255105388031387457035634601574258810359334427455350300035824795540182184947729741084414200763331728131989835270074798645727810610211953423210647268767408997530916747918774211851399676964341759677890694571803725386566514949573036275861789578770875975142868171266115308417609543675129693427234733092352415849253067857967487423677061066309781149019464083309173772465317117626523603762303389529186762757434422437688465787987567189298183331658327643943335136476288895944031471631549049452415356093278100827996976851630898010548397492102975060582424960521410583930473685019986599304288152128382416991576889958354958470914469728014491184688746978048623428935134162199036984905582935902858347846832552481849620324345137846953625446578630348562066212649219354003691611919882163265434262559209696253725793651364915752721544045546662070005914090772613548347094433
b = -97142917115100903737646309746786755286254286512027727847307332146074317010165637448980042845891477089998192283848286221142801999564157728180068979149076895185098834721079130584414339734389723052487178754141957216774570533759532368724375303775641822337079499544487394011700805693308205206944123895795467759730250579590051222911731414566446989757236386080716001840189315839600405030448106994926127682500256684223471908317781386085304451570510257134680554188818647240246362729557380962029356714853177321147452865291513645872393180899422350772932349825626502651573707547888641717674532894893074688180795160357423591745472403470294221646377615279206757162297731792475724868244849324396856900512100863153364699508327030885922319301979135025440031457375910427519751422204648774837860860733516381857633590709322279776812553661762838489489324566034767727720185975433645123787381064143436628654691449771267985992591083089837955934579579236720987500061796676789670232907568481273019225130787620766638518433114434451060361050760717281226617086168210657932154769474865516143295325437148850002822965510072825182997986086886383511854207814201385976618183372853443994558731603600456781153893267452897868033272261390308048510310139884301686666435675386967399498335099634758373050402619201773563341590202309220586202329148224178409476752779386091646462594864259635604909319364961694002520845130815034069824534906257949186171760461565649406320902206532877507278943372744922399289163113857595589828097446154555809590347435246563629792562494817813456155853933687368555111817093915177621460440380335528549735160745656509850403510645612258627715340613515002921700266475347834805601353458051639019395459041110897336614403445440633401272323537023218476311715586123652465434335035484807279752043629273583913513233757079708905632822144630036808560113656376702289569103906476853241017533290931874690384933821337994526123702599393597059212008833173131142455694628853540667838832465035764287812637886785119550714541434539156142684590896189209643717828641490790995538623537465578611658293004612991728813162017777637123402750487265147585191026018739106016634639267764171838886880928910897276832140531834313627940251637796261436160575550070514855153115879494589945103062040656827678544778419358225996637623900426047133045710743848384349010560244710772320441993766398499260022963758631346258922336172990771773841466118947644654678921607702238151410377679581733317636845897522156786405408945860507065724933665047683020374186655032349816473002209695927640046170746524770352275065763166138388869085477252789876695660321558428876535315662097479102754293057001395225457977936128965654542332872912053855586028598933699292828876353951023839715868280228768309428380750900744973372284897554303133983872833218204477569241810711852765603718324169312473549564122274409938826070250993972222508843819393977100230732304618749490018286969022126348377498224245475355114206083024624783175298311415147634768214609814581993552322176948068964183824269054203508986510739955656814136146661895664026947647771407202263669782450802691132881958250683078491537262026238875171687654375584013816368575352071428845857426681324215854141857015337550010689950233600048967417216391204305913123389821644837434645839065504620037807342911107560701960288831061817048807784078544517857813531454356849838918387542244103652438209490728925919626454342575667654508811373136862709860169622173849608262268392548535222961994539183664016355340925000689543105517103796330278346053558319876800493937779288140384177163002199749071407240313717922245779470057148617348946479155886884954895086813502461615018607688170511297259663850473665790154829538371559749119495626251012157905673345801638716579076127011252270524430982435091177908224306786161234059527595421487035211340386399352249485628832469868898549985628941440028934465620923807131387080776881238646463322511111842754445196038956222234659968754252154290617417942118928488328483353604921985667168292075391644213073111611408649636372989186944847892134633867286134894522753735562398214374944905010190398631942625801143936048831314146264356255960806671993243701759317723689923827460237462761343285789788626215708242409501946570298963429180767906088853860148571270394172704849666821432875010780117309346255247284857252889555959872699011835821709948452739219094652769690965576139592317106229208615433203991527372866192480246946462354418519586140429786456958337496270587698155437633841832421675343474325738570407521783608352051483062419735431969077024538914238909595384261330448790768303487780268384811499441639061164958190246936479280318214962648597050974914030227525929596427678325874960639412589499239341169861662523998391241773031479499393771427
print(a + b)
print(a - b)
print(a * b)
print(a // b)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,6 @@
a = -97440535413541563095880496720900775111396369239958868696757050914513176559525498842991099732125052875047522132529155840269697463797217711695626972529715687465087411096238760948824248103333593345004567192686187171799553788502309657869264796172466549566263640152032642978029727919250703156160699693019369703099049577343407788860909951626990567492039591659363030795150751031553542918467603290344116364580497538819754668642948486137783661821156659842250877976470897297430123097096663862577354316891207647488362239440169752381859573607870725738534110202395187470870388725155736122958116727578301406656597530866312476040525195295345618461466111839426092805368567491398256059044333985486909807623555087330147668632345936257411749077302522077251865098438168535328393896968833740688999947358865168449552838132467900651089386043170620787949352882993895489463924849865843524608560536742034710153080325488051721560968691083369000658638656261464930560068304714821206911474555618585783221194892065091786673458294819976696223196835426250307005103898983894573994945118069467747991142512979658266967151473311193128716772571016672546880761752421009610840683126824546477453431700017336809084579174674663328180404405575438803761734004906954533136975997465392239917337250785751752296454797532503765323495537183215264399734851229502764313214238319731880870733448361951324125036834035596068588029917858376522904828860147656869226305343832874027120451994613763186226385139036950922994588624352441380696192221142027751568795489908731448167218915843679840738440905585787801381956600500223888178902619088478123889640266183707657721171959102043455556405718051136443113035997399283506009001884704374772843499280723725643136355700721952315388764178710128197115138525702490356195724920604021250874302455012218539873411202694621974009256031217792783884087277225202157852154735481712900572313802495635563518948728123238226315993775083275958307896909695234969866040944713193545450960549736513872225983102322309903301431525028208311176901710914229768292279598424707684529327158013731771098949821164729933209568005217728531855430574393427296252590573271051642065233852379084440698735578160568085789984366334867598682057986154305713311644684712736653163047272667181818862633657111483696349469299312733748710523600142645891086408066350816439287706337388944999538895004137303361628442376690473922246682705185730969411833516392584577312452039657560375521408691780505580509254544431876259178266516644385595749227166202600243103534448785646197167314411307192814450823583854274571115699740219606863451966104623625608008213737892300710007760954311552352301699819704465626601732451366170129080628553954938116435011696420525656238337925752036630405166299044490599720068211655059012657303116826634753976685508510792551291597545101001577581509149301868831649970747259364524659350169491336207809491953924241688163363309555796898740114711306716371942595948106308425565846353791906812236666746915276533818072757715462033323910860682142549741949841285125922186579754225737091887579801420691346619069098317403690758691868472777860976174682463146719176710481597739919224343014970640269081108049524853197964485827238531449974358472268638640407584562953536299989266386210723719242743376439924738748187152587949779817357753541435158820724634257123121991433475904456564438630989776837565681340537436797559029530824791919792347825581289109076895231993151772083614573115408100624928560669224432537836306118814360580411633250288448788882569593537591972468189258817788254406824652676759988492912718973377987909697390159524720277761153093604388964429108958721138021804690386363515131017787048047474422582787766102285894449229255045506305581810500422716859413232281673977576317353469681969815301745632259076894114094565087608918493067984649497126158295398905642695314714556857089058677241292317483586749052636411105221258086248532745537073613845336691470260668227705866944166205070890404684970102068206813865629639017260395822044604396322402784827652422166424264011975753526068602261270122568174763800926477880699253872916784719572450614600926400743653573479286712138401600361405220111174087642615828733051791396050561032323059078191368596057183397206028817838837486356843168733893844316566395090480699191474262865402671831905460106187784938707845172201906165584162619301849834602542670641512090660731428805993933581961710799971179515361390242815461899908360193505867623877666651241011366440274433687064960672297674214887422463819627487648457911337998717206453089365690432344198755428748125884121285842397373207747949544450
b = 1625758638358640908852309401926497438466817549086253992264147248975490105716796587608683194634788149766039476335017565873320338741109213960998340378488528874808785260626758700886409885380823010739357699376468003127790926075865950806273360318479490698384148452140307577862606350094286042364012798300601348528698924183315471723306519779362875848416234630613521419250724456501556081633217098715234074532487543731416754092632156940027472539446176085618522652268771578174289548233358610491991736601465820583942035422267315102821248239911958339127712605663189910746352068332178226716676944716400985812511153841484227369639103256384659446360601383153192461004954757637817797776319872797612876599423529155662325457346354840611677642591994211471545753249694078568973024609561607153529766351417887010959411457246814885626171558070331783568257263013230158297851980797344850411841802363943755740421147779029486293034141688050939938584874935735218527700026597493354862631117857705621992432476509927175753436316603199883320935440814649859129215528859854268335199074772440413050044269594969522458605479981933577391690747016602155133942013551218864695379797910525083970730192861291233407041098815957724663656582266898921083923918390771538687237094543021285344329172490188098698431737545949692309972607915438970671350087265185696526281726974454437575650505485982098656745912455137914065927410585278778122427065897213001690527552909935572884000354551846984300537120519496287004509845695341531142566642201831247501445667972472048850009044812270665168614966999146371877809176166615270966735974853698970136283591276416611512706347442148757777181572663046833929248113852289286172284715503746787103306880538807286486133534793593121457208535239267037056036874947861972305979056676348260797298024175006669587877174911092245841409198244850347315850695479282768806373227147470596593798008022005141056253811918709294245077341547715465018697857649321740200978108540786460833098113191844281374731627300100481526861363346728140875008996130651819582285649736502951658723457457189141875314508767712058873187202035526420857865217877542763956962807718889303947083796957258574840864613453854869743146147811330000410916788506632695319997952033659483813236442220027828158249678435076201282524692414322546753207400547714781716627524957620959181068653964789363276385858620163007318062535027419725267327081703065397476304393402058366701156308841519669613896503547416299175811144054410874836920657449022770369339514525371173249111574628317447228370752515990968526554815124067325739923160487737465346513465354597517684889211999823173730588148799120533672564562567553502703045464832373133699159810889133636982934664378060238344001376662421649434434042285911681512912356177553179283927992556523208376405950226645295527392035422361501640597759343035983561813691142024018391990156686900430072777649055753501914551969138225379219276697555688709824429177526300162544387986408465056788073097106401165498734839186351244652194186418688806088664879122455720940563213128728421190656538269932066342760169513800659276348517483305171174605264961557131324634690547018901720683229134794757721742745234949146234722005360600626492686306375673806158376570834283293980891932644130670188945222246396695569228413481534824400511287613718752830686177113434947186414900863403752677811639570930693234833677388234014391198610613420257896054644376924856295749686310219227634189578782178139459580070596524113539619030649436684434168551717536416337379731350275680727550180648664357399172813473460245053477293752334429793484125968953589635712168838084992244814191317460161790597105128636120603580609080624565284047970482991124059981274711792604999644928874919157459327398690736669625293195148018265796395586563973762124075723124137445351151415498851924813194021607029843123917781702563641096992400768868615189031470035176112635098934435097229401088573112125933919761814210613113639551120987760437225659366628748708086355768849706787939923137746828529884557137188069253736126266643194363746741015906925292004465870510395816248741641742230880904142031544401271648877806416420689713910291288853383825933390224688700210294936889807454548128443164203226780015990119399157714869579499947039937645695026787098569004285096955150312451941861625874657301117016025932794936386749921455795258560796094667796268843909740599084388404513911860473639068692824950792342259773477672920790373798303773710709869044443915621059854534184847220131430831908394346174735676926552423079370275107384856175818379966272903123216845894978366303532867174851306834760476416643923181829175070580922464015277737368080304723640782867111784930836181647796455859387195194560207206744715051551794672198037531127904856650690193820624270730272138332
print(a + b)
print(a - b)
print(a * b)
print(a // b)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,7 @@
a = -130540575852757770283380585592075019764541443076764607497170410766974953124766101083341231242150564787174304604681604455852710214530550537532114376397580605063972139391639688849688712280456299652022573044511373818082840112349034679344649843745351016158862143396053175857751868728728979563256252568129373209522521166600536295833823680839205828641668688305556858081932864276904870434469744795674888281746917821472455957729448586549597298490605915729247164299676316964376125522402315672842321168962847938994367552222237688587316114065951047720549576544483563165887095198003170828942602228097510505980173047261168413480894898237244134519506687349943866425906700397245950474466443197938933383806868802563074091167365534237553572301210579537986579957704751792953271076286280635248051720445371491774094235743047170285888702324590005566542093704563973964683438394687036186504476378216922071351200903668421712927918742076409692710128015232297466010163563147203008969354902909207117889793234477892492196082854413577089202744840644029215625722006497177458580078315684890073220250739641758394969648973668571436864228160275077583039673536268589452782998452114826188401864428750785252587389920267557545403608082314238552337059585671793954646554472971625913926406028331110179272191263389813199547285820585059753808119653478911436737884349444153036778109000559455299670322775185842615089751173905768282521517554663125659213297981431115244919589761262263000229506228189355303497110494210287806774123113285653316396940858070257933541685439490892404655716090254576105867191501702103012062767379082400539368419730377742821549755326684846481265438196345528750505601829054253757879668313369115189710956058919105891437843920938691084626801916895120262300064807601544458972319532079330930534409901132365219696372803111731085149942579756168260318617830515867794556740705254997851262352999116995277112765750484906243150476550469702995834061830168647145491540297438114706251031950620792097063276192665889811903146870192636433465224435673089995778209543733690373808152558315524652577240243379358454921536395909130978930021802029258031836365068954683277336610500921627147803407389667069239605823640375957287746351966195466033397491908976397342688547542368992532975621624864686946724323011797055080670237823456669705927536930968146082888912697860601432645592136159616384674029632653536184859304457361149407372110138259395554031925042092072492361562030269166205072026197715986361659952497139284503878564221983880126687881401681970808635084656366589832043796772966695075731165013972147534662250808229099019382429277602089183246279750492420748548551471165658017114996315694478659404228440400390151279309340201781279597453024278643041090460615358443894489099717918852401884203232450648970139515690393081348110082252161079429124098428542914730001737758443603414815976431321828564065744082194616789565465352006048319344529082544789628142485271130019874090816946174756985812390239818955846473524291469400281679611719287789729559649449856457647860350558109961789670508615886927963461208755174220384841361884974693367915943196672168430982860818627955728647348839770743069740341997165765195973761429126864596888540669857886075112409511425320377764544117669762205323400722532275413877939904810891390022609865561096897206984531178417444911925633873583965575226336679723965922775971395101027788576702016706458515150404407445191316685365496382775142795957594983396300275647552033494504527270464040748379039072348456483313965586914549395781220121537809777039313537702903119095026956039416927722807721767388634980896238793411708764532406263974422410848618340399106834848249438141914616156680999448294506808082124808593068320954821977158083559751011785256805096337079396192877668207896589671806900939400323121025226434470006318905222436209461416026241763436512330339831959023468094897647791772850942030307014837435358215900698815988498655197790603572162947906439796922441306609885980301562502169360685825192666274614662474272009791972547129975988508654094721055897286301413051378264211877007807897049389089009300246478757797300232892757455566789128681515622677197661157187015390500952932424177035917640108651212053049785061400510532842072170122856740568317440469502232216093678655453205429559241368065955658663982251651588331063310072587664128817986316413671344880177541647672098504971449895729915698488946676568702018593343574511540357034684832045737888669862642640073457809902179982911572427013245271739236900902321400026453442116834393843159454234682704419140488219611211611509771825128564963992391765199043681205479596250982454259940472486232071786822006409368148122191907069913271824493756502399416417567637022723710149269560379156933973320998953910934
b = -6126941049297611772611229827347989781144963176048463279888483809582310921018226187293748890077374370178705207637770129468701390166948157539438143282460213984914538585305862808885268361984646741704239075208823770303446597086464495061117508777029532475712725960693675056294861455399887124587206016783045144645993112675426086686792176430868594629155923398032012967058520867328328225513395012841244386366528208737801545985472268461739673899626829059465710852561091497866476465172050090018057404568132947594969937241865670356229049913910737642657933287831646090497122797027537816838283127287132741671304164131414193850245788028238368820757220431231935835983622819918439859120582808754649339934520427904691104060484014218871478507271933121556516282171189870188417716649418772634583392407132527432085530465227946156394386462386029212055686595185956420021190645604613394095287229863783817386700945815510417427204259304514950929026047218642357402382071423803498054528729113327561951647833155637469474425671541269184021997566758696486842835163563892638379683060821910063158013318901935860776414048897076248981007661098872580714113932709850353433663641641470317699362553263611085657812245182618229446793534855005557787947987458939710426119800287696524091864460504565917923113869261109735565623174995188417742301706245092527222237884685729176523457546776775572752789472413727817327087289023095495695332832333485466931794589043211166493470896253851793328270722367467223136221555915125734192847595082504090560254636353885614927762475580715979161938383687336647227316901932950211494132144549031493476213016211083139165384945680796052892170231480084306681604927116397207718262820430676390959279420174263644258420188430302493011962505083398135567404457375171895800407368191092468259934543906695951640378377738134356736539855923993363961745867359640519871696333819290067862090362066009407809936333963899015123525280093698016484190486383314559342856801154883260868932535164657411885994460925490297099455058810580401826009100405623506756606889840398258663769543967805155745553741869909933677851722038736971222711522329274415896165910919430950289834333239069502773388027551140070951157153403680302440007441456229322257405070094316451294469071449421170092273716912578143959765473106195805105966606819993157773794019283385094780778010257780080240467556562605835816065959792995837753038721985275778393835623027147827118872852389653361386452543042452252663253644623810039204218783146968983021359027164448949874953025825640554627741766931625926503771041274782766111667926189730920491141651763257341598078755130289944121019133430157306527929697547781658118898053880121361519091866482671867558802801961091685642708658084499223426482928859585503920371386616282583518087978125510259868866928764512745657891271673973381791808346762021394270954119465076009353114541239636531273475409834495234475305837365803357346092284150929327973276089812429108274072629998532638253748293415032436374419847027254791208547036605312573582659961455335179410692044331740153486027513093511461524841738206211969291658793227120781179382781513059525833282134479586305375943156813041423522832932793450159417742808208701607773679683821757957279199779550595544580130886367686864587973635657727661562994787076892095717258826857071990364993967701644998838780174868593716856358186494983678404429705952274888004947777332992936328695108118996994543197252281156652440465303362165228278612240318493763044229087374389620333431171369218956150503381389489526810863713548702774361462089964928221170478856989106862980983831049004855724785945496501074458814079226162840844232833679596799141167537526229881094194584562607150596723494731286485026063647042860228862021982015405177830350611839858698089131446237322207292127889259912928818863197900379273845885267909979363869042239853132585678145918920973429214964075676614874075870997192033042173273737532588518919945814311061234071680816398437726907076612784701824692784943228683813626990904838196605259340906674011500165074027626152776290377535772230006357289437755291439027983303163088717270478934854818416130298157889962596342271646117618311176331246286740121774754473453741655155477221769295237152009948206752519582483548468100307796036483287917801133680447902579351729886685423261596066066287545056512532318107299448713031780347925658737572523088941888857773408411344462689594715542229313311096948543760335707591626047507698862437825829822941837690759886298314683434635856111167730182529980176668263690325198809958327367431747005030359835882359638552457513915510019775766897970833517285662147292193804153249642459355454245733892440757491907185007363089689414766705284843044
print(a + b)
print(a - b)
print(a * b)
print(a // b)
print(a % b)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,6 @@
a = 8125007660290678403093422435817867964416304867714372362332697927216056425702603737407102781617167381605085673439927434056692915737663012241212878463111372479960502101284481221162122555704009381256807893277140675625339836983401820011535628522277400654389921548092905505056584153315442493411309061437964442510526556010048995620333759454880117188968371519105459735902343942265816081757505165456880319485045292697538230822822253029516683598047740292061247620723163445064618151572563092794541589288131774090677892994896979519241283528701976435320912451299268286601644136606513142405680626860466108693518015372772527166749953631763990631956004003474716533874583368410325432116244605047795621476478332212227740336144286368781700135595496122022657407835268538367362888681534679004454215856968922471774509901520368901843511157759093609904242059170471197948991104897525260689099858908037086268220524306973593090415495066114271052672899659670403645618564408102122755096327854319159609854977167582520514895975346267940371158123759247468536118213521231031442066716832294537797275564723800159156937108404655986360054069365975373560377982755992914869546429084966722770757536526112815053615556192065714608969328278701428497261180251412637902804540416935058782755216935185068294371722533024847313706765153921165384420693442524168528245893720797983613304626247266976035396867108219431502731045422096034031935394268986234348140257092645684653388571671695168440148111031847268152494976687874631092549182754519880159379607707351670898446595396955741654469016088936379380230285536826565080973301317784290504765387478358571950899115989345687598735659114151168747093845802174504946273429189382674515154687896303199606154753575945894366073431635412588507562409818509458470553198259459142417328665046452078188841221658517761255627830247874551309886717905069349889706606564905226731107406338968036239158081665987367909066860452236170267757614934768601406244545689762003467123881630711220239553459481761393193639164933575371810415441345083026760239334699977235130106564533378637673851521003447175613334155362475137106893452087857872986952204006698633680027352378335066122651474807805024131435932122943513057772435970598865738863835167536820719021184321553702011357182860218595052856657639352679167844123768646292521353702035949306619787594519064735385312429360643420614940888692351848202847189063426168463786922030460398331040872705743812347801149516528482687740099681038765522873015621219086614558603174678281271438757501215310528126805649245802347107045743897379393259649505228729503981671920882610091502092536258274345135075519179371454548622915548593575802222046581903484758478180603751648500283268834559602828540381413578116202741885984173057657858972812896323508323220508199124869150525767807476539621097682343754412133633819058834078361729467578329424743668338887486495283432080704388369024550720655307421249127652773121998533024470465963984121918185852102526632912710604461956058500536262032718879315733874336723467305305888175880465803735393200304408039860394217878097770289435486854386537065342465834896178296008129253523423457704492850328361081286695389317574803372857781337602336431114396742900035323329597315412343078615228832828949523407904660814120819077979648763113742439183810210825967030541740354491328258279833898892747947464069443398148149904886385388767979020499941132485232316250741055097921016044856380587426687082147906735540756877501365120388163541583571592938006307940215576025785523458790764158480007061404308447702057876210252489890732418922565947587633669604294801396198484181861070943076730702400481397022423900427720114659414016725332376490249567258731675372579423090394914515029533764902808153973270566422501968084063714762757725173731519428680145088015401013841208430326498555385137700121445761823021890197088969947540167125451485398014649120090580458583751077263275152187410320634977414912239456152378631588502484709980389753560601576215888607831778650394175990245708078687133875682156212985605253429112967725412017889270760923922641540924421619745275605914919627189925334942289947614584692119858166330142776976735051612699316844593315134474317901674674176592624486990626328440415856294100901302889688830895894268884380405459637444884108681008012826424276892104982005953527689786821382830699552711448234199298886436319422259120868773714459313339480872045743217923748042096377466750170018310247690051353280910972357035983719111460821233965947006334745859484189008052241181358104766069267733177633648259876734820286587765690325700721337099503154685789890155659716156668866246874858170175963909667225403579637575211479141283747257709040622177937306161020443111407790654027362311538755512087
b = -6426000395966292764993599966151514017252832879616956310927089371253959614657009396620381741753464491844126616832583368165575041446314789702633616695960844224851501555616505147174866915431794003760768184833687597108610839208550654998555455855996234462176663798898675935079770953245648353467304147983463955703574032847210266946452783234855765022688664580575769855018220024123526732472352462254700689371140122362216821961946553975440429718469143221111516479080533283672992765908249759988533912275549272074385321941189019015952805422962502300822042837613827027578122666106650821225238153548992518893027139633355308039802894091038328900054769807669288971956918469814260027539870407428386625911133489694422484898447831390919639426331341538496782829968919849199706390227308454482396664186060369847914032223575319815190118017303713510227046072380052208799795809124845443963048544602701813568018651751808833408186087378272318295471542224965156599702529099786649671460985833340151076914218757796262204901753178153697812394098396129968872146882786986152646868761307777548339979169578671343754799128704840386105281123427106172123170465147718478699341714567484698581456716800909448236630483071317455244403300185738280716271411650210513359498991271731400275057678603340183344136118815457627050421788967792543569361618934011098387749467898526991882541074606375532761668125345395850523170413403350951792858028880061218460450625547084461238855603975890182278796107673294484918207192605107573502962278047394108120605064968596125537023259250941072537569684083597725390718894705097234939889701949112941345220915889170473459990343628735675867926951342733742816259616040308393167061790178960181956692794171875324394799221745418499689490771982055010927080432717737993906069718790578455014606791956809114832413524451144634379740367028228513724966885298166408585252365919001750121971232111644164849058119830077894999820463968847254848466656969531383401445237856280541719733573260970314886550632395761868320019497541826913564034584692810316912763520365490461763417721677657830145936310664320455612574957292332340735404971954329747215810517644508521976278571008168466292721082131109518146768657620689062710286561342655430285960781413856066036351762952668494133665410259252042685956071478555664079202322422833847938183010926400380551386642882585536548815126422673144299070064134820724913659320853167666037764917580672734378179123275393386262053521623216631648754899965759806891214599943126337726546548153177533057895251217073861811723897471955152075868711608442960488211555121935944545098072555081541708404701549129761329439742598295745669871491702570919044101152825527536579465261057360319955154522821413813195463495743672158728753644714911824934303866176529062686320255127892516008348780081232362614778259671276149458411662555264468796601480787659595176267388613076271869529224502870723776086773625084878426616541956176601188463361574272560276492092997240537895642059748005561405569941250949565788870385837985875618043021242480007638012501617196627236348343203237714584951755770261786690864801118452489981690386664166928078716576208915576504023321311417335095974479302523863140844141283341818305298374110990675833175948309711739714502909146497507468097006053947759688461304110476504320081258929727317209433869581991664990056713471562144746513345730402373612619383226184231031123978191858300478576885468152365370867798051125614955443436719360058938211747161549941343618172489749611290254448212113439315932641741359688384171281501335418773214906323987100742835244516882422272656286745829023250107217050160463229908304880354748567463859224603692586058725939001305965913243307279126917757663091617610002049828448219041613401653551631451774869224279636111067282036894812898505189241889660346194148112835918597456494788407618653765040989776970848311994733393680892384555259969492387079009672423108877387885003988315014337616824343209618605839743081169587284035785420579336111004122327322904978611226953029559194679115211201476416502100848778925094289899023204650758663421857718554673162673481029874363091097578972189461057509193305511977659131905779161201182416031626794543507226701114665027507934730174343399461720515149364206003467936128612294785888237870647564957823817053753142733155086783100653972728980829858104523308986636432171104881107499802655150946457050857742117409767437708485601167548593286563857081062310911426125529870243156194481606463845556009562243205255201316135273720091614022405721259695444003914473464195460393195438875266936245100401334013666689215862234017421435904548928264565257735431905340932015944918455408159316793351216779557053108407693815120878116626280732998241657909150264141895064934182940739724114720153332532775790714904786168949852951489333061242050426660400935801508092216529293458429344376609283241404201549485027001478546498271945106163135014665589614232518991423211147459526192810482917406288823
print(a + b)
print(a - b)
print(a * b)
print(a // b)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,6 @@
a = 154239138717853301429140863459338617471934589259086137250155046682670673553747312002660415789251648095578859052329630545561387658284983362238305238528045328414244139056956253658284701687868104108800783079269656121926003451183656380834946016236461641766929457162162040093052821429491441815557088954015393084512433062270293371152997986038610700334942312352153389150806487072206178824554173202987984303121036041696542383014070040642992775107147426565474076626984028744144378541328876224266397989233152894183286478664665913913491895254274035671872658778299056693204257830623143314160512815877700349968270609842917694985901899949822585176215558186637554437110371775661860314564348454030371339773238868453100635342618175540711265631145892024022088943596413734688847523790081527172574652265301701362214555167654063667013802174732066713891786358152777347741994428587027060626430358724418244014213110409539034885790945406796425418606546163985389238152490251829529150757951213395309706306035034135823059481756332740741725458573703189139157695325287623247689352386170765220620243801543781640355018922125872256214139324428540238931148639091117040305928643548506323052171296711609041287054480253331805467614018963380162061196025121790849024942170104875917388718436532544969307255358759196248553105458401248539551053919002787181483735034374780453638063026010076487589540462552435621357916523033026482472919712180975334036110959763256925399389618835063179817640261937470852986157093081337771371038803582167946411754130380199153559775829293186771857397342714624156338475888337777544272910281609518947668654862319903226199935127606831813407006539052115400814124974460891427797113832547857071392623562837076348916540697176122902157048541612682335051065372083246705316922697840612524667197924282982567808734927330058623498408772692172460919599120345954831308663929459184105182817963769027308448358986927256783990614303673575985654372829972678006058403462971530207166279972884123842546923034580957721453851710859187430396345442979892379436445539757390774137429779588219704522980136553235284294520548825805024375613962754073059771000750042964476399335752342326852078487185864586172686826613470271667326033936694278290327649471474145182624897601533860579474659958291865517072334063707535488385473013934467363899650429146694369173189941674657232514519474109488706927065124251514898151524233901526567071280745075607491012314605974896741794561491820953976641718921377816379364153933420124125381588800308731422446736042241296769411713651366133853466452460957006579535549073271329321695076777507922911780710464337215509145961408117598275164059649712315066899371479945172692812417414621692042426016237635613284745191972365233353875944458179155771731476773124731848718357658196046310792825076356685877257545487573255076574027924996597537561340197937511211888188397077560968788423371160810138819057656117822027450150607976336230692753442115822263916088510414674631144641813037888975493930438567786242638858790352839908837501019418937200086216796310231973554932139120729394456272295808168332495493086937686871669407229134454782753026835373762250223798531725507840534120060389484349573873574614335819517698126416772368498810213019883319827763800063543094176773256914302559876683268830841066647066478078406840772342739928054531715676617824004306091027486246506361495873551151617978819592370509323768801970932217172164570675877421325124613468515354304535718669603511490750866690684731719534741426498710615174110666657147503333120249711240849146657781154131305581431477581284342931936682934300463825535555585893659824297536952990283556124363716002804106317701005998121648344000279896149881894101476934232558884513210470463943423433083985343761917653786844535008680342990519947203076978567436376212066409009233873678539585707703510455336076378571976206316288864631190886330150140863588358831154963410493033459647115105510316964230237879315090172084646547297626740484108133524054290944536218269015065950091727586176216778650673995052564948177939656064085436042194900660357171986465299085806982374423135033566204921211344532698053035607487430375698898247252075909149873124778911162311551711563354343558144889195823085973403236343855119199928085396450125444111999727174431588409600246862809066432981812519325742555099632954066128269198257036767449705589543874056499904196161944050763434192685720320105279444072656405465393696508294382666303590587078031501457657686251267373491338052133157942566921109257383665214044283798948128729555064147597508731038403673782582985353492948715786283027855296002627934848750214597475708506807237717085382977815908455314896674722964998098968629402697358330707261050376907238652964
b = -92043475156150549034823733673904247914693211182921793548633159751549830045502967004590434361957852201739908741716447706822981361755720765729888874525271500624813927817959404932257689532740141767050434312222691643103292227230265430065934532089375150019241276614146038519904744820188255741087734195113271761579855720147781273626170295258323501152206301925678550707805032657805003022730500321900470939910182846029494629924660467525702484477681202921858412497424459548959579385028929366326952768790658433158050128062442493311336748109388925284607008972097953589419263323462804689695042198643940589449239227829610373348607099999649927027844851854860462694578766066241347312316935178194664783412527466991460777834284959151623706142354847717668940156630991502582726728682792927225509316059414706359345220285494417380836835582975846509087336105517308281945116987313297640584239842438975889715797657261432841447846681434797132860976610727335804772248535113146749115758162256418177380460373590633659596895595801181442194224394852958415273595526677424420057413924942263746148252762203433475207081659356439038426857755002723002187619531515833199274655206198619204930752396001845629210716278074329534623276171407744682228113064609184026674658540531139525677421784896555629326875493227921717789859000425023050463522443172981688986176567624228686480337075031052891431164957412767350524017441388020939020469800181928970108715489514222549057121495930574877229779212521092908399720919155603007074388005753400448386287766856969200771703858121749639688477826222388991051904756733694675937799973398875327480411070964752254738096788454093768899126981733316716364755988753639109406502513567443435182656950624572157961350298083966268099588971197987050523682859154278007828603959905405060444073900969004855769569697635365524707121751373633288580844741571542660578116605652797524062849913450035642062183794322928481974518033229763015735784916815952561137160440931826926720782305386127020214579660273074648809278783216298754858980211625118350630731011046069252290628892529118706964495829319559511990130906680536099806821326149095014822829110692978841524557593214840544160312841242128546384247416190986199200047226177009648392497201982793362646031700940180822353824400123778097829335907496770005498986289020707405538623681231318067538428268315143748445213164836659438995588550822572488484240144588667209713036679624633865141284870412906933961730050255846448935903490130198181039784735214922870902244708282627105498900746102956211286329035633657703503611929951919626910143282523585388679738556170506230138432090170130859540221326426861672504843278533222567528503656796708499883756186155212709129916415421481330835810911017538504775523399111164266559317984162637486659872997275723698213540495408402696389551010280261654259611875666705465575890920167432462030771228984397605478281692337987238996549647811815921674402114044422335287721062743140907597082490778438504792429155595291956134009041383551922391709718304902712111532804999429708825893005334690746525666932733534534203414498775341083124805034645790877145179432166391561594323180447098627468148279639896459981464646230177415037761710584978936287251961615217425430590058519650128974855527394781369739743543195547458600025353680740601783005980767842361599499248837119291246049817880734073939046427662200913909874195786996781501156697864700810619109155399362447124248293015880875583752024164693228854420796047689961369023581850960256347534221935715787678989354689203244360519445510870807745338808675160157788640058649146865244460847424392583053752438873482477607133807433585157571440060973568259872872409202381360781257803454779388692696491358606306686101604632498500827863281684925495212682566188757408970580539614073002955316247932298516299981364927849050342768517802439648048924045664660250352861903232914088603162382896124195845303755165844679200847698181767576016064352367262695906615220024304241227745178434467290013482181707992019361516154747692313353535628134823845435563327228394937219900050921970395893806310926002041160913900945052253015534978938288170474002536432583579300578670799376102880857003264238333228650984520804688329012466267062121973578566873255070928129689931211132524748092842976440788305808294282980073781038177700660464638892729565823093552707996409169485082200633249139830348573532718827456074705748331850887116227383863991309252002094890721047305232706215315008078155555191378642282673388020992582773649166702996210432804322798287333785058710822448883538569646766425131829923815966932267051138664199104171242727384159689479109237499024518293514938738217900076330417346
print(a + b)
print(a - b)
print(a * b)
print(a // b)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,7 @@
a = -2412401212299685888489787162546832949542989100249885503096056396426028995841374975453917618572691710800413609980779725577694839869949050068856514381755028368083302834565901481630503417585119773013541792815271171825977629089850439187768898294779084655196533226015004235473615855869723044474153711877814123295149365619259815424436097674241805082055675575096181706425902080655622678527978292107909388140632942942090895659575543018483841623652506799965033844528048214391283810889787849829753783647397188291454694334935119728445629725057553836437708330055649831332053394403871239362147251396407475771210651849278246455392692275191386596363290731966814174162362331370977443127663766704292926202933119436326168902406569509050338297027706253500098871243236674097920973750076268344525524572699542679670164329638959995433439241482498798231680628003890419355803742213022713000088331225050832865203338540720618522766964831931344332937249781062221617463031817366723327961342598999168484912969526479916323615244194669297450770911109488218538630861692592122878434236497637335816743672981009699916033725903455828735153956531322702155055770894073051023534167769686188063392602586379201351968133836359721271796841617403848855943104376585807809735426019464430527473736458665309444943894180027983852107899871747394317141682471544643002109233230128515891098376050702862021715927311929855477207927355266764788836471778773692556507418532017657649417919069667345990234236820114105354245801408569418670439540395538181538139846141637056515233214638969970986050700842302458954696546521225012586412357895771046940995409376773149832963445924019505138330841174811629582281733565671660100231970987346325172745862023797753645436575676221373880672394145361087888152117785263346999004816260255130584614437045457383926439800682707429738964353435509719369426613089955158704531329085940016931914911137499270520495157809078511918230659781540225421743111336795974279246373337322312866334089360964766457147454577262525490368813181079973662631827288036293598474872623865492001186327904062265652866646732855281691396933473345259291807041414731097741128361109456241021747674749710253126577389449261431560512609360696033335790023466680278540825654136299893590904611352718032565154063871710909333417782663020790579659062466524728655095274618568502222133165226803846906522262168553103228336331688447519345869622590275082623691054230697803712560153420674642758231991360913301998525121026650319871426490576188511222740974145788014583729243193943129993549691669700055971661369336551957572641169478085068114398420268674204423199555380946804155800486904442627331776605431702302365490629618191697759073409914129977259657160603554276464389669046956082517701421892604159092631274633267744740095333695263467134235696041097659050076266319559459322889748923139230161133633464601775770937610846327929835621683082956204887107155787543251262762308250028579215453402983633986592938800957434726915343987505425127270421103769539519858815973220196680364103616232466097793430423970894322692966807791097190334901865278637721105495433966706932513512230164892174863156899073835158253740793857834918862155897533211651843222093681849840483449949748105805945515166492608548501156867596470680945158849580225691619646838464868201624013299319224883129388443571792610686803578510389554580938300816299910806142426906181485634561548578874929521116844316178832616987511747075299596064641677513682833161010047288349881854386204962586693968334263670791079237982064898685302103536859860199036595704649193109016375390209436856825213245617685542306394448450122582806820203634477486806519187932598591912502316970458628443467056328860460569819233673258630109704421556054211879277598291034941206883425057491796205945183671992993776935509791713426040607203009552773223468097713973548232785551471199054456324198326908806703034421746200996476842890545068743198533014175350591310953148273073755493052385969677269378198428648869400434382636892464587288971760396448613195002391820416587459051944443535364698146708730143133333735817961698263828581906921758054643747742566401407378672328855268517838152150386344432498105049219109234593083365252148189084152318199079428045312585291392602727976738220888321744582709163664640471229205013124736235952356787236328493453205521415698401670689107536762456516351627002595285411820336938295985910437831669075203121376321176171200157004660238402450308183431287295153030055327121677251110789903630896129289054399563278110134194734726752537190474462943909748580319247718165221145935416443473002399787496332487856561998057017138795565564898644057218774268268304778309540182097842570706745910121810406991251348479721048862032118602320644053825135475668689390899444335338592806945066
b = -68827848280222662429792059060707513545670949701990582175976299364831391106040615706147812360641234585486204341496752970536654191512240867726633520922246252154786910640556062774567709911377916956838557178954088648436291666144887126439890325263476631241308527949010697009505617398805589320282116095463447655362425378038219075201588470252010241904401902107712661216154241328520066001996552381403667318501357076679043806767976478719019148174417518503360697098336419486409571644827490646552295644472087531554696804487085753374359096885325710867322580611940206897600754906091276203148370888034952247249286139053884675062893722148822941913244950261820494681454131468274441195023515451955702542396517174654656337218050349634337352454858246583922107678303617165435881126183523570591366271322519168412857320857208199224708372947838322612302739821914494100190628646595460176731811663334427181099822881264369545983433072632966372579477943922396068951352049246398400910029471677940336676067067650591706033288568799408114193836347707796697993624562372982768067880896772435590609796021771997531390211889723313195759123099292034128524462006596464682213808852392096078044101561880132464812658947993791336462226420080030914833406654744795752530488438985765711889922449560912721730390557405882421654165472828598071715453856184393599654952023140700354504491998184867734222034113083972276822315839012959373242103673844336916517125763599022977361660455654504791421589320526664782927097446795960167055033491486463715323642502191131391310741657591205803096834365299662616663266821070968790036770746266217899098852927349699532922570276679715486878775885409983211565180388537316954176710456005742158730041544284164438721388783093683243850216686677805179619357168333276226004674721967850969301438034847136259893426060750072437903830802977165104319994235251301985146726134456182029826273774708169711155704024933366827024916196173912745833879240910675456216622766325583873090971575533213772961604266737700822721941181859865407345156486128667060275728565724210396049737347521786053643269185014010793178763186132077880808518398943177531079762752542151782632877483529042114538743273833484338009084311528363044672195142336704680113817956815779891432834477780000563000686058151672359838189467797639809472347705825246248919920819411144319386680573635197120303242547965380255365007482318174319596262232368673405344620367936504497728204668475385463405662112001445287337246682822921846597327896868374750256355066035501119225413931881972577301712335219267029309302528713527222846001213143719003390744997599326044324604425041526997263956509095237841782795438329187963935313574829611146655023732399033755792092199130921320347897703847645177329758459684352618352787033637274888844326559279403518351261952978757510887391088296160433868011508225679606940650641064913767957151832282510138650438743956593444939238482758392970054724666605404814140635840349441357308248825089197461328884675006221742930657179036201390492439337057866219750077002968027908424033617467835244878731730631220748117414903180119669708814731569058841260780653443577505612735207974428080820958441733430760805019815043894440973851889483692331130099754653259229786525744801502583490771191188896927969581728168512551838894270469362427064996596651063992019223870705733037483710956743807991096662031616548059573708165769926952602485222268750269460343407393274834436919699854275871014867841902367096906690683165696682236445091350866605649205841829187702798134350654773530511009743279987012522142620607830561742650474897635124642081468204467578196400336448116048532539748482292606003249217003338440768195642883223401377333590634164052159731639434260984138109785180073467498861743979327570509909476631256062439069065355425711196471359822007470551020057847481839951919678243146078797467681161281807784955373120241310786668700003841549794242839656178580520813196236270153086780616785391393372361371772629402536671337161451720837055552745199418241525029395991095402543454486754393600116714671140951372594345264034851472008713403005237519063041293825627324473637293126117943092495808703705577338464991085325317723370738441705883671573671922204079061042034278528315539150559086099954616797475374565922572119041181206183884856890664011396344034447476838452662259478035177278110857743361877303456365423958348379382136494879503226854253172907892172114031056388674459184137461789263326957149035493773485048129681863105607775099343604293941731270219021368753514598637208557844830182851219294753506492181350616033639334272451225435965311040151291376618212259068375985118
print(a + b)
print(a - b)
print(a * b)
print(a // b)
print(a % b)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,7 @@
a = 962504924259233906785095455431265516089800391316333403384919303010191892640856804790624438196574925784052271197535768341682820879068853154969553777334746322210644006265788198486965484473398354844227191091264053733192761891504905410622613534817459898249532367281734250386468542429217534137003724903331147810851387420575956162597462768369256961780655208538341875468146499976167581465082753542701817073753506898679890813310219062619648575486919320326315945511197730382619756081092193200904636648213807864221978928858763490873221650346258052108624925564320092538299172236393705843560600136565888033652056087645286651210043988774983649447345627418475954615563667103470460044838690314942411817790760459521636594255380058432877717983249622475178507653743995854501071762368546806342084878666531193448652714733235194337285547923332822423435520561463981941296053882408455789149699683924621281945732211824850704712588063125198192903145165933524589283180082453446958128169029682497156215359958362783894766615665727724540134801997952678030420584502346505886731499200136215179699854520546606014142288517875764322063098204172725666095784970271317874831552937176227620090019417389119127773141433728657829411417759912689887497357344348938686882855353629358307927179391532649467231671862621805071997660293725141320839431086322895682118057940491429813233469125984760617328695885975113026847185587557833061316397882067381247363070919680729888247758258323990295566256714649785067947835811543293257038009968580264630296254011206970526858151708889911663610189079597207277686673827718176246745115158454419036241652183466411840358950034100169913966541756807215807215087185983496299283025599064308927480548932851711842346621494201571171164316132692552460936599395162681906679571337040644051995809676111801953969768125247512526705638205485504586900797751319803507593408514916975227153372089638867511058699164885490106900360839860573790012198900952289986355818767634954845146330706987020707278350606702640696963441282030967514207944330009958585501216811400141588298591283395848071505012771760957826675065320119943357650400791602769856173196750262232995279738225518194292550071483526380327803926012625245479671978037572537269749032145679994412869343062694296602656100615578170520743409872314967093371766436446391937343150235164791908146518634920002658194240672800939707034192327366495213805617493702630049424516902271120868699869099169552876782284775591027510977210107034559405271116982037414895187818625069679124104967228863820546895677291811693809776782030532759385438288324411460281845758565187721902404231681485710073384125683272978985557782090607047161022203998019983363846389473940328497227634595407863126187275818153540086354840431304616541950185997796303433086828613578355506320575964660169817725620216324561991063400725608090264587069622030599111812108186561431848517314547552579513906956348160193917967219277216748983927520104006399925219539098584061109136821822330263807338710936286957750841807463637383730923142119068455208428276562453375418267420232180391432623017617354187097481144420210888071016932454875841157329937223992926201433041691888401150070745007462126364517922858956761132194514818513267038512101991836621412739782400670503237062170946597213546842263184901951990596505802944615720623486368087278124803156272093213490220238871841559682392696314480140092784067641255207715617926629278402619614882184779857561393918710558498293296932883355382133853894657357191492793208948455659950750471513244928793231152757834597463319633494219276496275254831669394738079613455553952600138563098908876920555658536874003837050839670805804070452446261373568322837132710328833054198753911662706421704111670172981169909060815559044937931556968860705446074217014698182326379712799602835599684500054556364587063871024999605503534018423471601857654151868240500499576186360061672416299783568785258877170797923257612709054232398148474626181037490747867589035385399815875825568046265779953292249515605282841745667094895567260358631336824355648802823862766285090566058663888406226101929142894201451904340492628395897404824651600742373692689436981380641542125518539855305198035767911569861458920391395962240876770314902290549657242363208352158848122508884000735525012160641176092848801130844025977924622057301549143207943289343189791612784529136126742884829385339460673240229671558016867035551097950995928042477798749387047736810995095197680009694029404429009823004635478069338098416519480827270618533005144298350675590608750688978327994313869325228711959293170577715
b = 33749517237705272839195499976001605707688633507038030385202259428045523025585135983451824155642899427583338949056201673399779515988870670251396174130969957170188698444096699953077754427538946458882755755635743422647362297399704072999591359822079126129220260169008323070089433022934644131663526724599629925195188258161247917707596016871617030946632992968671078852876080507076962682370295771910039688407093574079915754534100590344889818460223775217119528669268826396167599031968891487158477426907933894401806833494215597887068397229752901204550570714830295729044722848815453571957579378167737894183798633215099129752306919655465235151215804444277457915721922529269237250270602828638113130774055145790624792127673055804190921973415866333098789529745948677717980823399309086575944490317007374810956691076433701550117532764934396005943768767681422289526384504976203846761571138854128072591773825100512011280500354473772677802341594509305233698232675840578695055673125983352655656846950660608218822710347468356838099614376450086741435944304237715617320547025667870084473400071820804587669100355712689724259843650414244891379590963628422578426234995386167347684638681795437201961894648166720423429033247319241208720723416044209190218064980792501501484468355332629240949009707472027020335887360401017287895319884909859345436997717218184050655456757166815558591773923448616840225099429813229470005380524706501089316391842015331582504879766362431074368361485260398080461848597198160981936976935471145115522333717320465237523409355811430495098710153206119240503226408819873768565154538817537441304586933861131833962748387532240191503822051334998642494427300754950237358778173117053214814160198086569317824637288123239670752466116494401486359592340080872764224246331103269138723415925529813621726067284885502771125398603828613020478953695702064778273967936363588482346609743822376708143338121355901966069574418735093616131821581469298795186391975646536964803024525259383765148176714928648564939624172336140933602686496910572566371844835652056956025504696219518755591552505979735130225535191519442528508630469855029695053705468821791410861279941009989175738951944680213903308845536644012842042737233124955927537215498880932533965113334702811225017635527936564035337594654464836382790093301780081917843610740393935495519664932667174104200487341170435179745639544915680323024628014510374847880617754024580338021711455119539915617389338254543808018449722937762144590669003781729812639111608739878247023183605011825217691464016731613111700605182230063241714260849451425240065518673724404412844991503710516749100954481003338189386093604613014046163324817233712612847772585965854292901986673302327256514322429589572069039111415781195522958004536274497363030013222181784803250988444119285262067309698219333804092006570577976514499987940795993708153813374951394101351620404918898826624269827014106587857118820502827469830193486585699674057672266107470411170719885136005812469053164177684872353893590080971070925707114931618644289060839189782010418883384348590695623822976668974111948386402528283865277753105475110148014253868227185492130869918201197210897228208283002109362575480920315952464479142684907925645200516283318981850280406612012678844420886998144857803677816334099018384039181775739509711030058881211762321669835895895318723871850602658325401550802381897052661693900210611044690279338692675800953131202492078564205316569776758325256684538430954121577281802531383503420378282593174325362667513399033629808091705586306596476739978162366647287843192005780888914717319486834115193940590254677379824895992226968857859580938076397149438617028488091822422392129396178852503595872588266086718776282472362004881189947141831995966240111901863407017152392292449734953253518014783947110468551215126290791184248646014959602220526458645329190327891950856262986111815933856895501612401978984787974173698718935877508171866692900067209131045989589002298137706285486531316038371671099900409326708831445232313991368906376448561898839072841744804682960719496568594315823255531841390882064158151672147652319669942830647951708017558318770009173759485199289019869219684705735622408003689912675996461007909730078584524685865059513440050609463996137934259382941210692171277508174832399426225065108490708978589576618742864638050886876122946953129641814281770219726839881355020636255828718742146281325082714482320500398654897416480104424267695937983643770292671587528912567349166547258856914633965175151394465867183984285157867379434229924772311613224471158005647203421557376389597019
print(a + b)
print(a - b)
print(a * b)
print(a // b)
print(a % b)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,7 @@
a = 565307724136942222118116843068096520989574390249995944162968726890424830866682147556469316101750010723463435684547071688916367836683781317080680612383678648721927348382379474922758291551629436209532608839643684379247753455279458095770478609030485099832005161181257420343134864132332919532404307190089799915050533827476336595885649943997243664851219807836459429510708405141667134424375737173383065967676732840273783644495577467818189558375309040153269739498820970417648726003654080353017195959901519328920344187711236923756118357990781955039974088106241879409753525446355112429169115704986001203759214558471153732557401374909330352502401676572612673353556166959082624512660558915657862631118840887428381110229779966621752362642105584423773185114732328622928882904841810597967547639991886760459832548175904089388582117889661576920520917677442723082980758499918918203827508035404277333611677397155599924415103049372760049011952669697178586649870305286416310971487396429236339852024728648245750928347153369067061148766699355765227066095801419106467835814613040571826443694091309990793426932978524410228750662458239546327212353250039068025653419753611064824830668621732702622017674856535229688632052085973032854097478392185603051970282241297225771028655190695815581517873693976436838942720055918224664872837701260296075647235023534413021692619922298474291916269580177275130508383011331418372704930200326153220122013614241226948034956722934864470380572231215597120426040505541432502497597101849397303980432372320359341686483596952420791216502008136427739052056079742843359525510862276420703655729084272042926280019347506758375970144941177877077754430672302601783366700405945166630622655793225760679794906960422110571045250138544260231754864663789570831997513969378217357519262990293578480463765319909914783515697222306902862557255768317442159997985550682272056562979162024531043189670343829006324539896411794040389133289151007404301919955956600669793152054505391187439481434567400262694194098593237614094778333757538417131287241304012406181929149685918645735213005761751619156078807967651422406737858174916927840325496655180900088966510939660755798082131105632638057226359390633418608510421178287043120173257598798638633894383158992014141851687556285047162397927082073924566105050754206069175350403396322594471630175241910322943697305052265171491452065316130531922916540713381034883278239544111299046605213075628359257480427415381183597939417592055650107406341299921941642292100038232565604407011826099733266787633195983073027679789520875557902731966423588310266586378494584773954927605245875793096237190744894218138738078598994875305666444021886306153654475999115354154640626549021359904371695097641100598376844852653146110866346885306445513447149408844189010601471897676528391658423707566072708550267529204574665877179376188511244232202695327693573340116882826800659478121104638355626408570190412310500919628381682117305304565647965666404763687382643086670894343121358423176821687081866793671878247342783598885717424602160840104781060090858954693023430640149517756867030774998064639380781903525049216183487447451641066056787185093081092823254413320726791661328216976880909499205123749840012736811330093243438436554022351932810319691259354572482489126351831139981434177400966588804940495538027619851921364011036158014115613368147442346376272373563686427547938939304400918450264235766779330078206880114574879599858921953911014417778480916986594415784604640879757547779418895096947775371279555117133719985678630753460559841213502838391532770813881137580706668038283294681961656511462619317544314772282132928940738413527977556437585768993749823649779337754487142835862768687466222277333278756269139665440103320934975972312463815284330058356888119303615867300946507994023164008027645836606403330381571527359621199872598356009655973209053049365478430089060716983909982971871428029140091111862842459170042476601083098843715128131238633595479354810083408412097266929572690471230284562265427384713996424354647077322530891860008990660868360153106403578272328177133346987783442509877693357355968903995847861029583420826693781113084028370468894908127645518150756068050365192532140865917933403353782758324689730475078708879101863181427625997571682219801828933173678542733205030592396899432572703845312288205064726740479304294795253208165418111814179643317744109811613922862251592625835956818988506899503384639749573523638287339017117830264171661965570097497038454484911641176755383584357645699125993766010496552599592963299278594043844408139790330310843962863152669721398277874216485759823286733946862405896261182305894165251653181728933009193605991732216645771395354007014112531838481097027098600864575358755279531925766031557760336059490260248328439419297763291751797367864633241820628947866
b = 6870011986309123552318057582291472527466539581844598941534536871624558534195616844298254547663957893321042080305386216571735070545770901901313596845361364721557505164430773094206481677403922788325560273346122027874113425264461018710403002736521342505287739115086223479221226448012622689850904435221120476483291679881722209239575433762060884121706781663845998002839256435783541263848437017603205550488699929320506787392128736094823373887533803017176815602686225293401889451778923045683370162350366389387895940144876863906698045018269580414931836914380254464666526967942403027344574668321096989608271397621605222481805510120439622671463134726480941585261221350238618668587767462572981598625679346858811173612917436988151758639033084883357238489272704284009200737359850849895093253787612351764155484538999297810662217423933360889821471850377292551055758528914201270300337991416436479884838831325553654107608157742971510090408325937934281691528350167780225969654873236408975770987064372046294395854187821335666750567401495878869321666085085461282085711651030722076113793563331124079341362533216328280528934146990755789556275479958345308609899403990013129834911235904410242860018075213785387058492015359037956979351973671417647214106901081476745675288185096453604258266812123958196268390059175501163440741438461125905817464612076857366532941272503848850109817213069260966640288421774209174179133688848299527131548512010918033792180622640506918396665894867549824384693940923415295087381557408617681635952878616623530156479862336129090078741709099545129393663571657487971851244200199377405453281376900793644509772562829881814332374530855802895698356135557332053736125270804738119616183283628118227452872917165906436668609592339948711666663339207380533612879301381226413246725779557758395940483499964795828097791711687214841094603225395346029730863507695540544970768260054315389812309132649065178664576327048617176632223997255981321134353559941202450557061871610215137695664289219485038812538119167786910927030560065504642477396156188048893742150027077375533551430879409021556488777780811875172988275821871964417975308302654440327190431685067009535186758078755840456356097111923741263367469985496295918820808794718158580055274657971153990905239191707698521924263008426084459944956072896637697248156330613789875039156775350553317007055781181225637853137717311403129274514152383283903042280213839429173496741177999908420515169651852854914312431921701505888380169715238922196355501564123243970428782891483199934963287000309572021496752169057082577059369684430058169630165228532883929338005294831672136182597172903213967784526329621728249413291440333945625732359088624004733327834006651355168416061952266656464217770206461212364635285636027517640289048396818997898585474287707895345235905273745431251129877460872488113765448960585600748323627524073721060786471958097373193414027430182556937303656165055157852360019685459132529820042952541153215946509327003420764351753900267212548504297601553056835224068761313886048572955304341237267048476004937112392965381944930395221601390228926273643793511455573356976256830342436005255176960328298250123336296574214730083596646638956870200803262161450352579512918794585764633299839983753132579825840319125889222546476201144141588930479790196243723064652674674684850373625390812074744340515776595959715531137101664992842353097879444338147965577725877213886784653584480433041750985585902970587116350769671496478227384535395882270004011045483774101023549932842349586720759509339950085836364535056516933770909065163796142155789671748746801866804273462280596076552283597403342699695233282178530139328380535755123490277451160298951300402025585594062941704540374434527903591371102886430638906735357072467588076153657841843341628839859595887678686677320645998390080211299791499889518943871969737053491611979157848571134891389418323506037812536440205729833212919170929827834416684367084975796381107875123316846915104952772721766389005404191866975287334452842531034123828836888708373408174313515647242931745607139883684378122806885217981397572967099423066098622612735935263577131015149917477857774153796987720247409949818993738031200869750856436260214459267355852965960877859730040734942352981469066489370636864735440276209766253264929528306131049484474512071440090371609883235623058168599708397941538245732345438374768984685371705330009404166190977173763004065534422160234139757227502904570736374271228132427820467914079999661076235710949922016422627671603200382659003195532508429068274721233432751813379817109189143098769335558971558218238663184362071968795609613193210106819229847613598786935595994698718930673795835751671285200738063380802485040901357992634183025962028801629766172239729432378450385626023
print(a + b)
print(a - b)
print(a * b)
print(a // b)
print(a % b)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,6 @@
a = -221361132552498312615410091278042815265905178210942714679336922175880786069624454985551583394555889083858821149601813996766800034993923073779661402013710170550009601717903799332612700345172416673710157267110763007781698363365944278019761049916498535566633664884610464784235884490346358448577370593926886497311692236960637503246930629127318649519585712562376229656597139774550282390747939296737466498020530551719897156908539809878643255015862187165372404898429489495103738907190875738621126460789177081192070517293253894632910762578043160383654694366370418865737250315378933698838689596994813867769750888983437722255037376409498209379533418327061266576415002558381028864687101173153218998145937693327155804274786711078994809333857708551300281657432190900679840518808084749806240887553500484360653845362514082211924433471309525356776969808326854472906695623190798060938517264266550424021549191174439974382466117313725126426457364311416297929883844825398067502519175434052617873314653373249070766643396069712835667954641636383037856601452619071590508733160302555760034452945568987274931287530362492151707862752883714009961975371558674280360356875818621008039240684633265770469879393135937753101140896048130476541630514552524194857566206673623136972378858200288975919049261256978225369150563580904232612973393938732019954411230808094534293900196356480540118970559331734595240185461263822612374176006017912442477441892346430447064617775895094311320171376732486524802183732259506527562814205849857192707915385701338560270850608594191782224521896751053525280930159621853813097480722746128795607848601018892281119578190541925718190288615826416998152923906809068728720135689537057601452471374281973165525665994187949666125373817803721944609630311297220297551851447654457401026803816643438712147098653829905659051772737379759833768310851014506038638430089741078818111654300797522374858353223326320062559481717688389135770408654475940794756976662284461127140294813672653449900416829291961474395288958461930968464540211681429693320370443039244872344143665297811737195957031754948567300223570651502595321513989456525309865121071988402673981642821308785844251445278566996203706138431910738534973720854415709608845048955740948770233996118051114865929147319687928610473060672266977123523023303334713386958879214551965155020049050778348145898584997478271645178920131685888358907933703994885953811724711047838457991917872725746512845677273411859159769045151155703301403824612302372123120655812843219812406401274235585745761255025013595609198464141016523580415872518773706114010310899298227055870196779183442494712089516925019586867458645745841286895430029596501500430519968577965259044233256263183020818420918079769110639182916689706974168105711326573373699236304781713281677104592388498474351689185905013081491998823312640178369354080796174937940672811645710811469121890248872007631776403159946782699299078610818288502572592277684575879335516692917698490307253889560927752889850710773642279844983853259486031074593005498197269938814938445579811185491804205052070183444881052445856403421613410086880950750524075003737407046225629254688294587711021147710491421759027848939537032149622777839924871745175539260570821243849073914106349106242819849423060404299181269951101805282113538505654071413479143272380482945243645093288201964247913735409494440220712373638879554364307263682661000097387191140485668040750699909611963166937389549951824000847566814621776787684452696245720686503481922918001254269462082384697916081126596978999486822148951545065932702029381256262042273927197758090424861575399045455619831653943802313389403999789998016096055020319363981615169005341480167202758302261552372823116038464514976809839110781472080170400428808123939676638304726967401454613827246679359033619409628541315277260186196214746390073632211286097061632604944009821240057865270019851876959489945791601976745625821832960661358813937083487437912484072464186724453578414570176444622176927822211973793611475849603322888893827517643788216129200676515848510842422759891380825121682969852470781669047563621048230445717767755983147685423987946752894509260992795642838977896801192382147057331660942811941664635847967538452948028619408524335716636377011043060467717913503477023494460168795546593385286303348200828575157077649663676215974981842304226213411871938937441127381944695845089730171368493569982706969814533382803222354573601159722519446625126848316182119096327295323375445985401849057787160404781937337688158409255176051307409354896879562998998751613002606900272623723224202493745282173567924847610241545320699008653111715705217070758058127068399686562154588510292
b = 83751117225991073857194622331384348639973281194852548779145153142406967900219518607091085779020571221535874651680670021304263974249027529683043040297866573739589404568721435863767320105728545587674423671427627413272562747458882947693411274107935657252393399227877183816675087735491285464494711840612387960580348262115249701865057953017478812202316398156293523858160978575489576360953293494565045936018193663247013683792054217392835690465498791934076663571581465101334600076670883801637048363617035036533704822332837582289756923124530129516517777032748426958111598307381827946214051618180064974816813521231570944213381862629181851523364540650676895605267540884586463490465589801932834416599215827732408809680440038069552052415061948968013655061252559343186387215652781165658097009092893777305382345827877462940486420445668983798538391606013180367296223084723153412252399267521539251681815436041205987835575472929633384433471596789715707592093602415054939417170753707111359206046679663940648096244052370021179932272294264572924257153048772039155495234188274999504375011737427875478075898891041191180680666979783201983719367260783039221485457558870092011784090657551947544140098067056792265755971648134178524330223423468204445419078594507317672026809471350083691665415272621869493260430952447224375173743480555500709266819532478069697427991282070523971798544545291462752660445729704091516002478098437485252367381240446448317213228515660376906993088383888380256448532324485218997210672009160734469480395779326720348468728784870924129575639382826071818019492026145962380407534416654692282443879542657316317970382393375513262917821121069573364838256314006880883548798069980519835996523750019824424230786157818256845472006837906848548561752007962381142849467889019559849672239104944207231409515217536159126549332557547411385081633645074932092421963957111580649142463095272434332741707465882134253384014974803693364538199582845456348263800910036900226910093612735611535932507130293287298992548291281607663479825943833409615780661851748669611118709581100523314544335879803199631188869371379801395019778271409073622034366802053505472541198085015363332490292722019521906976289007692323626035424158107958385463912639383879942978066046032901725499081183507045852150187470724902840193785987612448150303976202204704333658814649013425646681044668222750070138695063196754813050619210540257477434409976259215019887729897797488859881110748551969071825842149581944085626511975831455264473705395534306040634730137286937051173013949309424066137718023520420608113805492419747145912751782669438710204505460035567852067245184890013100136968859977382188955035603694404098099430267072510764571508078509028622952224154647273832579420620225723990397004737334837625346405851863601178452285329101101659189793350746659271397441006650646172086602873932165702531330428324463563407748909174797813349766364283526940657218013435913031127274045953245329692209857976843229918999741278491044370512999256690785205226163657624803990806535378023252322292496027447131448589666205621588358344151799501312746865774314598092184857710640092708104627679226598089616081904729571911150235673852700301247518190624759696292408948917035867120466896023325405086182284988029920182572150107270952525737817662035724689871353913764546741714366706688650386330834265915055807276974617234578024931218644769384030093730070670816122180838919460468555119822917927106440227093914453591962297865907835336838948256938038157122481037251570666271347703132357103307515609092660689126568663528726779149168313500024777193367059350787187385542800560478235919129579710352825320328149447024627267505903638761948449836163275789447687214735787773527305102778198767602902156919699572346736552914920038680706971525064339680174432405180477808931203162528735736015808619859385032247273223348613251135947944194960839109912272461335969478548526824890882804264455512831516737774121622109990069874769599946817778138087447374492287334690538093314738972079610218360384467583092974997981319128061809672980912207693297545544960765091007591142414729644064923304473414970469827683235053837115586916619422487267590843217040526599965407488607788730490120405066556301647416485439166530302543030948428853836980216657358616109914846220991713594395825044310189908507046748255734582738371179503366157134307063138988579654065565167187298199803933112876676324769392121017508232676351628138651752872271074965023305413657832434862647471987748804699423013884010866176800513834017723819071293390030476714042504860069426529635792133282459690924764855274528548201424199902204114623086398406540623377278407560428880542841800079981709682895784544440817276405339306226942221894041344626782146818298126447796969225627790757382415545393486633
print(a + b)
print(a - b)
print(a * b)
print(a // b)

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More