先提一句,这个框架还挺自由,希望对你有用,目前可以翻译比较基础的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++写个快一点的函数
辅助库来源:
还有一个群里的大佬写的汇编寻找文本、寻找字节集
贼快的内存优化加速
鱼刺大佬的模块(在格式化文本算法(暂未开源)中,本来想用类内多线程处理的,结果发现投递任务太慢了,不如单线程,但是模块好多好用的help可以用)
基本上或多或少有点小问题,但是抛砖引玉,欢迎各位改改代码
应该可以实现简单的c->e e->any any->e