Py2Aardio 转换助手(python to aardio conversion helper)
这是一个将 Python 语言源文件转换为 aardio 语言源文件的辅助工具, 主要功能是进行源代码格式转换的前期工作, 可较大程度地减少开发者的劳动强度. 目前, 本工具只转换源代码格式(将缩进转为缩进+花括号)和替换部分关键字, 并未实现语言语义和功能层面的精准翻译. 所以:
本工具主要使用了 aardio 语言的模式匹配(pattern)和字符串替换(string.replace)功能, 能给初学者提供一定的参考.
Python 和 aardio 语言的语法比较, 可参阅 aardio IDE 内置的[代码段]-[范例程序]-[Python 语言]-[py,aardio语法比较]下的各篇介绍
- 支持单个 python 源文件转换, 转换后在 Edit 窗口中即时产生目标 aardio 代码
- 支持文件夹转换, 可批量转换文件夹内所有 python 源文件
- 转换后将在 python 源文件的同一目录内, 生成同名 .aardio 源文件
- 提供"复制其它格式文件"选项, 方便进行项目的整体转换
- 提供: 行尾加分号, 下划线形式的变量名转换为驼峰式, 多级文件夹等转换选项
- 自动识别写成多行的 python 注释,列表[],元组(),字典{}和函数参数()等格式
本助手能将所示 Python 源代码:
#!/usr/bin/python3
#类定义
class people:
#定义基本属性
name = ''
age = 0
#定义私有属性,私有属性在类外部无法直接进行访问
__weight = 0
#定义构造方法
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s 说: 我 %d 岁。" %(self.name,self.age))
#单继承示例
class student(people):
grade = ''
def __init__(self,n,a,w,g):
#调用父类的构函
people.__init__(self,n,a,w)
self.grade = g # 子类的新增成员: 年级
#覆写父类的方法
def speak(self):
print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
#带有类型注解的函数声明
def age(self, b:bool, c:pd.UInt_16) -> int:
# do something...
return self.age
if __name__ == "__main__":
print("单元测试(Unit Test) in main module")
"""
创建类的实例,并调用类的方法
"""
s = student('Ken', 10, 60, 3)
s.speak()
print("main module end")
转换为如下所示 aardio 源代码:
//!/usr/bin/python3
//类定义
class people {
//定义基本属性
name = '';
age = 0;
//定义私有属性,私有属性在类外部无法直接进行访问
__weight = 0;
//定义构造方法
ctor(n,a,w) {
this.name = n;
this.age = a;
this.__weight = w;
}
speak = function() {
console.log(string.format("%s 说: 我 %d 岁。", this.name,this.age));
}
}
//单继承示例
class student {
this = people(...);// 继承的父类 <--请把这行移入类的构造函数 ctor 内! {
grade = '';
ctor(n,a,w,g) {
//调用父类的构函
people.__init__(this,n,a,w);
this.grade = g; // 子类的新增成员: 年级
}
//覆写父类的方法
speak = function() {
console.log(string.format("%s 说: 我 %d 岁了,我在读 %d 年级", this.name,this.age,this.grade));
}
//带有类型注解的函数声明
age = function(b/*:bool*/, c/*:pd.UInt_16*/)/*-> int*/ {
// do something...
return this.age;
}
}
if (owner == null) {
console.log("单元测试(Unit Test) in main module");
/*
创建类的实例,并调用类的方法
*/
s = student('Ken', 10, 60, 3);
s.speak();
console.log("main module end");
}
- 2021-04-28 v0.9 初始版本发布: 基本实现源代码格式转化和关键字替换
- 2021-04-30 v1.0 版本发布, 增加对写成多行的列表[],元组(),字典{}和函数参数()等的支持
- 2021-05-01 v1.1 新增: 转换 except 和 finally; 完善: 替换保留字和加括号的欠缺; 修复: 'pass' 转换的 bug; 修复: 单个文件转换时不保存目标文件的 bug; 其它: 细节优化
- 2021-05-02 v1.2 新增: 按钮弹出菜单选择单个文件或文件夹
- 2021-05-04 v1.3 修复和优化
- 2021-05-06 v1.4 新增: 选项:复制其它非'.py'格式文件, 以便进行项目的整体转换
- 2021-05-07 v1.5 新增: 替换全局性的特定词句(例如: name == main)
- 2021-05-07 v1.6 新增: 支持带类型注解的函数声明
- 2021-05-07 v1.6.1 新增: 保留字 print 和导入别名(import as)
- 2021-05-07 v1.6.2 新增: 转换保留字 assert
- 2021-05-07 v1.6.3 新增: 行尾注释先去除再恢复; 新增转换保留字 del; 修复若干 bugs
- 2021-05-07 v1.6.4 新增: 转换对象属性相关方法 hasattr, getattr, setattr; 界面上增加"文件名改驼峰式"
- 2021-05-08 v1.6.5 新增:实现文件名驼峰化选项;非py文件提示确认
- 2021-05-09 v1.7 优化:改用Win7以上的新版[选择文件夹]对话框; 废弃core.pad改用string.repeat; 修复:去除行尾注释时的bug
- 2021-05-09 v1.8 新增:转换过程进度和文件数量的提示
- 2021-05-10 v1.8.1 新增: 显示转换过程状态(是否已完成)
- 2021-05-11 v1.8.2 修复: 转换导入(from . import)时的bug
- 2021-05-12 v1.8.3 优化: 转换 import; 修复: 转换except时的bug
- 2021-05-18 v1.9 新增: 对多行字符串的处理
- 2021-05-19 v1.9.1 新增: 对字符串重复拼接的转换
- 2021-05-20 v1.9.2 新增: 对可能被写成多行的冒号结尾的语句的处理
- 2021-05-21 v1.9.3 优化: 处理冒号后有单行注释再加回车和花括号的情况
- 2021-05-26 v1.9.4 优化: 修饰符替换问题
- 2021-06-05 v1.10.0 新增: 替换部分功能函数
- 2021-08-03 v1.11 修复: 多行注释内容为空时转换异常的bug
- 2021-08-20 v1.20 新增: 转换 @property 装饰符定义的只读属性
- Python 语言的列表推导式转换
Python 语言的多行列表[]的转换(目前转换较混乱)已完成√行尾分号的精确添加到句尾(需考虑行尾带注释的情况)已完成√Python 语言的 finally 语句处理已完成√Python 语言的 except as 语句处理已完成√- Python 语言的 class 内部私有变量的处理
- 保存历史文件/项目到配置文件
- github 提 issue
- 欢迎 fork and pull request
- 发送邮件到 jimone@qq.com