开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 19131|回复: 246
收起左侧

[易源码分享] 【新鲜玩意】【模板式翻译】【代码翻译】易语言到c

    [复制链接]

结帖率:100% (47/47)
发表于 2024-1-12 20:06:44 | 显示全部楼层 |阅读模式   江西省南昌市
分享源码
界面截图: -
是否带模块: -
备注说明: -
本帖最后由 明天自然醒 于 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文本
支持打乱关键字失败,错位失败,复原格式

这个算法已经完善了,看看热度,热度来了就开源
demo.gif


正文演示:

怎么翻译?易语言的风格当然是傻瓜式,照顾大家。

一键翻译
demo2.gif

  
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
a整数型 
如果 (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 {}

}


怎么添加模板?
demo3.gif
注意:模板可以任意搭配,也包括可变参数:

模板:
你可以这样写:
寻找文本()->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)

点评

看好你,但是主要功能要围绕把其他编程语言 转成易语言,而不是把易还原E文 没意义的。但是把C C++ C# JAVA JS GO PYTHON DELPHI PHP 这些转成易语言实用   山西省太原市  发表于 2024-1-31 18:44
需要支持炫语言   广东省佛山市  发表于 2024-1-28 12:46
v2.1 https://bbs.125.la/thread-14810459-1-1.html   广东省东莞市  发表于 2024-1-26 16:30
即将发布新完善版本   江西省南昌市  发表于 2024-1-18 12:38
nb   浙江省绍兴市  发表于 2024-1-14 09:23
卧槽,要是达到100%汉译英,是不是就可以用易来写C了,想想就很高兴!   山东省潍坊市  发表于 2024-1-13 10:29
C++有点英文咋了,再说了,开源出来的都是中文   江西省南昌市  发表于 2024-1-13 10:05
中文翻译软件界面为什么要搞成英文的?显得高大上吗?   广东省揭阳市  发表于 2024-1-13 00:00

评分

参与人数 36好评 +15 精币 +49 收起 理由
etec + 1 共同努力,共同进步
datunhao + 1 + 2 感谢分享,很给力!~
完玩 + 1 + 2 兄弟,你这么牛逼让我很为难啊
星马豪 + 1 + 2 支持开源~!感谢分享
聿聿 + 1 感谢分享,很给力!~
竹子软件 + 1 + 1 好家伙,吴涛好不容易把英文变成中文,你倒好,又给变回去了.
ppppzj + 1 + 2 支持开源~!感谢分享
wa690602724 + 1 感谢分享,很给力!~
pj小黑屋 + 1 感谢分享,很给力!~
t176 + 1 感谢分享,很给力!~
望尘莫及 + 1 感谢分享,很给力!~
qweipuq + 1 感谢分享,很给力!~
1828902364 + 1 感谢分享,很给力!~
风雨3137 + 1 感谢分享,很给力!~
qiyuer + 1 感谢分享,很给力!~
Zźh926 + 1 感谢分享,很给力!~
ican8 + 1 感谢分享,很给力!~
YzZA + 1 感谢分享,很给力!~
mypursue + 1 感谢分享,很给力!~
XXGL2005 + 1 感谢分享,很给力!~
keyi5566 + 1 感谢分享,很给力!~
无尘666 + 1 感谢分享,很给力!~
3266167 + 1 感谢分享,很给力!~
易语言资源网 + 1 + 3 开源精神必须支持~
※逍遥游※ + 1 感谢分享,很给力!~
a524666979 + 1 吴涛:WC我咋没想到呢
光影魔术 + 1 + 1 支持开源~!感谢分享
Kumor + 1 + 2 感谢发布原创作品,精易因你更精彩!
爱你N年 + 1 + 1 感谢分享,很给力!~
fmheart + 1 支持开源~!感谢分享
玄骨 + 1 + 1 支持开源~!感谢分享
国王软件 + 1 + 3 YYDS~!
kflizcst + 1 + 2 你找了火山的核心技术
wuqingg + 1 + 1 支持开源~!感谢分享
inat + 1 + 2 感谢分享,很给力!~
空竹 + 1 + 3 YYDS~!

查看全部评分


本帖被以下淘专辑推荐:

签到天数: 1 天

发表于 5 天前 | 显示全部楼层   贵州省黔东南苗族侗族自治州
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 6 天前 | 显示全部楼层   广东省茂名市
支持开源~!感谢分享!!!
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 9 天

发表于 2024-11-16 10:33:23 | 显示全部楼层   河北省邯郸市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

发表于 2024-11-15 10:35:12 | 显示全部楼层   云南省昆明市
324324234423
回复 支持 反对

使用道具 举报

签到天数: 11 天

发表于 2024-11-9 22:50:15 | 显示全部楼层   福建省泉州市
66666666666666666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 4 天

发表于 2024-11-8 15:16:51 | 显示全部楼层   河南省信阳市
回复 支持 反对

使用道具 举报

发表于 2024-11-6 16:10:50 | 显示全部楼层   江苏省盐城市

支持开源~!感谢分享
回复 支持 反对

使用道具 举报

发表于 2024-11-6 16:10:34 | 显示全部楼层   江苏省盐城市
高手,学习了
回复 支持 反对

使用道具 举报

签到天数: 6 天

发表于 2024-10-26 17:49:16 | 显示全部楼层   广东省潮州市
看了源码 思路很巧妙 6666
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表