|
分享源码
界面截图: |
- |
是否带模块: |
- |
备注说明: |
- |
本帖最后由 明天自然醒 于 2024-1-12 20:08 编辑
先提一句,这个框架还挺自由,希望对你有用,目前可以翻译比较基础的c语言【对象暂时没识别,后续会更新】
先谈谈翻译代码,本篇代码采用全新模板框架,模板翻译函数
已能识别易语言我能翻译的所有结构
变量、参数、子程序、类、程序集、常量,当然除了窗口
怎么个模板翻译法?
e2ee的创建文本知道吗?有点类似。速度可能慢一点,没有用格式化文本,没做优化就拿上来给大家了,(优化了还不一定舍得开源)
比方说:
我要翻译【寻找文本】这个指令:
它有四个参数,如果直接字符串替换,会变成什么呢?
寻找文本(a,b,c,d)------> find(a,b,c,d)
明显自由度不高
那么如果我参考格式化文本的方法呢?
将参数用{x}替换
封装一下:
寻找文本({1},{2},{3},{4})------> {1}.find({2},{3})
是不是自由多了??这是好实现的吧?
于是扩展到可变参数
调试输出({...})
--->
debug(, , , , , , )
目前来说是 perfect 的!!
于是:
加上附加目录、库目录、依赖项
剖析-易语言变量、参数、子程序、类、程序集、常量,
上个图,展示一下我的格式化字符串算法,600ms处理70kb文本
支持打乱关键字失败,错位失败,复原格式
这个算法已经完善了,看看热度,热度来了就开源
正文演示:
怎么翻译?易语言的风格当然是傻瓜式,照顾大家。
一键翻译
如果 (a + 1 = 2 )如果 (a + 1 = 2 )变量循环首 (1, 10, 1, i )变量循环首 (1, x, 1, j )变量循环尾 ()变量循环首 (1, x, 1, j )变量循环尾 ()变量循环尾 ()如果 (a + 1 = 2 )如果 (a + 1 = 2 )如果 (a + 1 = 2 )计次循环首 (100, )计次循环首 (100, )计次循环尾 ()计次循环首 (100, )计次循环尾 ()计次循环尾 ()如果真 (100 - 2 < 100 )如果真 (100 - 2 < 100 )如果真 (100 - 2 < 100 )如果真 (100 - 2 < 100 )如果 (a + 1 = 2 )循环判断首 ()循环判断首 ()循环判断尾 (100 - 2 < 100 )循环判断首 ()循环判断尾 (100 - 2 < 100 )循环判断尾 (100 - 2 < 100 )如果 (a + 1 = 2 )判断循环首 (100 - 2 < 100 )判断循环尾 ()判断循环首 (100 - 2 < 100 )判断循环尾 ()如果 (a + 1 = 2 )如果 (a + 1 = 2 )判断循环首 (100 - 2 < 100 )判断循环首 (100 - 2 < 100 )判断循环首 (100 - 2 < 100 )判断循环尾 ()判断循环尾 ()判断循环尾 ()如果 (a + 1 = 2 )如果 (a + 1 = 2 )如果 (a + 1 = 2 )
[C++] 纯文本查看 复制代码 //.版本 2
void __启动窗口_创建完毕 () {
int a = 0;
if (a + 1 == 2) {
if (a + 1 == 2) {
for (size_t i = 1; i != 10; i += 1) {
for (size_t j = 1; j != x; j += 1) {
}
for (size_t j = 1; j != x; j += 1) {
}
}
} else {
if (a + 1 == 2) {
if (a + 1 == 2) {
if (a + 1 == 2) {
for (size_t = 0; < 100; ++ ) {
for (size_t = 0; < 100; ++ ) {
}
for (size_t = 0; < 100; ++ ) {
}
}
} else {
}
} else {
if (100 - 2 < 100) {
if (100 - 2 < 100) {
if (100 - 2 < 100) {
}
}
if (100 - 2 < 100) {
}
}
}
} else {
if (a + 1 == 2) {
do {
do {
} while(100 - 2 < 100);
do {
} while(100 - 2 < 100);
} while(100 - 2 < 100);
} else {
}
}
if (a + 1 == 2) {
while (100 - 2 < 100) {
}
} else {
while (100 - 2 < 100) {
}
}
if (a + 1 == 2) {
} else {
}
if (a + 1 == 2) {
} else {
}
}
while (100 - 2 < 100) {
while (100 - 2 < 100) {
while (100 - 2 < 100) {
}
}
}
} else {
if (a + 1 == 2) {
if (a + 1 == 2) {
} else {
}
} else {
}}
if (a + 1 == 2) {
} else {}
}
怎么添加模板?
注意:模板可以任意搭配,也包括可变参数:
模板:
你可以这样写:
寻找文本()->find({1},{2})
.如果()-> if({1})
结束() -> exit(0)
计次循环首()-> for(size_t i = {2}; {2} < {1} - 1; ++{2})
高度自由!!
可变参数你可以这样写:
调试输出()-> debug({1}, {...})
也可以这样写:
调试输出()-> {2}.debug({1}, {...})
也可以这样写:
调试输出()-> {3}.debug({1}, {...})
也可以这样写:
调试输出()-> debug( {...})
模板具体是怎么替换的呢?
凌晨五点的我解决了这个方案,递归(虽然是递归,但是速度还行)取子参数,
类似于树的后序遍历算法,取到最小的参数后,依次替换字符串,当然这里偷个懒,直接子字节集替换,没有用e2ee的函数,或者自己c++写个快一点的函数
辅助库来源:
【新提醒】关于参数识别_精易论坛 (125.la)
还有一个群里的大佬写的汇编寻找文本、寻找字节集
贼快的内存优化加速
鱼刺大佬的模块(在格式化文本算法(暂未开源)中,本来想用类内多线程处理的,结果发现投递任务太慢了,不如单线程,但是模块好多好用的help可以用)
基本上或多或少有点小问题,但是抛砖引玉,欢迎各位改改代码
应该可以实现简单的c->e e->any any->e
格式化代码.zip
(307.41 KB, 下载次数: 300)
|
评分
-
查看全部评分
|