易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

【新鲜玩意】【模板式翻译】【代码翻译】易语言到c   [复制链接]

    2024-01-17 09:01:08
    高级教程源码
    易语言资源网
    572 次浏览
    来源链接

先提一句,这个框架还挺自由,希望对你有用,目前可以翻译比较基础的c语言【对象暂时没识别,后续会更新】

先谈谈翻译代码,本篇代码采用全新模板框架,模板翻译函数

已能识别易语言能翻译的所有结构

变量、参数、子程序、类、程序集、常量,当然除了窗口

怎么个模板翻译法?

e2ee的创建文本知道吗?有点类似。速度可能慢一点,没有用格式化文本,没做优化就拿上来给大家了,(优化了还不一定舍得开源)

比方说:

我要翻译【寻找文本】这个指令:

它有四个参数,如果直接字符串替换,会变成什么呢?

寻找文本(a,b,c,d)------>  find(a,b,c,d)

明显自由度不高

那么如果我参考格式化文本的方法呢?

将参数用{x}替换

封装一下:

寻找文本({1},{2},{3},{4})------>  {1}.find({2},{3})

是不是自由多了??这是好实现的吧?

于是扩展到可变参数

调试输出({...})

--->

debug(, , , , , , )

目前来说是 perfect 的!!

于是:

加上附加目录、库目录、依赖项

剖析-易语言变量、参数、子程序、类、程序集、常量

上个图,展示一下我的格式化字符串算法,600ms处理70kb文本

支持打乱关键字失败,错位失败,复原格式

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

正文演示:

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

一键翻译

怎么添加模板?

注意:模板可以任意搭配,也包括可变参数:

模板:

你可以这样写:

寻找文本()->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



点我下载 (已有 16 次下载)

引用模块


源码文件名 模块文件名
E2C-1.1.e
鱼刺类.多线程6.ec
内存加速优化v1.7.ec
哈希表.ec


引用支持库


源码文件名 支持库文件名 支持库标识
E2C-1.1.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
通用对象支持库 2.0 {A068799B-7551-46b9-8CA8-EEF8357AFEA4}
扩展界面支持库一Ex 3.4 27bb20fdd3e145e4bee3db39ddd6e64c
E2EE互联网服务器套件2.7.2 2.0 AA50CDD5A14C4C5DB81BAE05DE4DDE6D


[错误报告]   上一篇:保存剪辑版中VX文本含emoji表情到文...     下一篇:仿web网页cocomessage自制提...