此文档旨在让有意参与本项目的新开发者尽快了解开发过程，在此之前请先阅读首页说明对项目有总体认识。

## 流程介绍

添加任何[尚未重现的语法功能](https://gitee.com/MulanRevive/mulan-rework/issues/I1SEU5?from=project-issue)
都需首先在[原始可执行文件](https://gitee.com/MulanRevive/bounty/tree/master/%E5%8E%9F%E5%A7%8B%E8%B5%84%E6%96%99/%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6)
下运行测试确认。木兰具体语法细节可参考[逆向工程的实现](https://github.com/MulanRevive/mulan)。
***注意：逆向工程不一定实现了所有语法功能，比如 [# 运算](https://gitee.com/MulanRevive/mulan-rework/issues/I23FKW?from=project-issue)***

之后再以通过此测试用例为首要目标，可参考本项目之前的类似
commit，[如这个 super 语法](https://gitee.com/MulanRevive/mulan-rework/commit/92f35b8948b38ab460047d920a0f91c71c575ccd)
，添加该语法***所必需的最少的*** Python 代码。

通过该测试用例后，将它添加到[现有测试集](https://gitee.com/MulanRevive/mulan-rework/blob/master/%E6%B5%8B%E8%AF%95/%E6%9C%9F%E6%9C%9B%E5%80%BC%E8%A1%A8.py)
中，并运行[所有测试](https://gitee.com/MulanRevive/mulan-rework)确认未影响其他语法和功能。

标识符命名方面，本项目现在尽量使用中文命名。如测试顺利且命名风格一致，在[语法说明文档](语法说明.md)中添加该语法，就可提交
pull request。

### 适配新 Python 版本

Python 版本更新后，语法树节点、错误提示等可能有所变化，导致本项目运行效果不佳。此时，可以通过 [适配新版本指南](Python版本支持情况/适配新版本指南.md) 中的指南进行更新。

## 项目结构

### 概要

木兰源代码通过词法、语法分析，生成 Python 语法树。后通过 compile 编译为
Python [可执行码](https://stackoverflow.com/questions/5768684/what-is-a-python-code-object)用 exec 运行。

### 实现简述

参考逆向工程，项目使用了 [Rply](https://github.com/nobodxbodon/rply)
这一分析器框架，在重现过程中对其作了定制，它的 [入门见此](https://zhuanlan.zhihu.com/p/104345761)。

项目中，入口为 [`木兰/中.py`](../木兰/中.py)，分启动命令行下交互环境与运行木兰源码两部分。

[词法分析](../木兰/分析器/词法分析器.py)
部分列出了所有「词」的正则表达式，需注意[排列顺序](https://zhuanlan.zhihu.com/p/142290539)。

[语法分析](../木兰/分析器/语法分析器.py)包含所有语法规则，以及如何生成 Python
语法树节点。最后有两步对语法树的[额外处理](../木兰/分析器/语法树处理.py)，分别与类型内方法和匿名函数有关。
