分享源码
界面截图:
是否带模块:
-
备注说明:
-
火山熔岩动态编程语言 是 继 McugScript1.2 版本后 改版的引擎
支持全中文 代码书写,完美还原火山以及易语言 的语法特性
强大到能够实现易语言自举,脚本支持 "函数支持库 " 的封装,也就是脱离主程序的函数定义集合
函数支持库 能够实现封装:函数、易语言类、常量、函数传址、自定义返回数组类型、回调主程序 的功能
脚本还可以联合多个代码文件进行操作,能够实现简单的模块化代码规划
目前性能也是迄今为止精易论坛 最快的易语言脚本引擎 了
脚本还支持 多线程 操作,经spy++验证为真 多线程
除了支持多线程之外本脚本语言还支持多例脚本引擎 同时存在多个熔岩脚本项目引擎
脚本还支持及其接近于面向对象 的包装方法支持,可以完美模拟面向对象的函数调用等
熔岩脚本模块可以以纯面向过程的方式调用,也可以以已经封装好的类模块的方式调用
脚本也还支持DLL函数绑定,效果与易语言的DLL函数定义相通就不过多解释了
代码的书写原形是火山语言,然而纯文本编辑看上去更像python的画风,但其实写出来的代码是和易语言中一模一样的
脚本引擎过硬的素质不需多说,足矣完美协助易语言程序进行更丰富的编程体验
能够轻松完成易语言动态热更自举,能够让你体验到用易语言写易语言的快感是多么舒适
也能够轻松兼任 易语言程序的 动态插件系统、动态条件执行器系统、后台做工系统、客户生态系统
脚本引擎的运行机制是 代码 通过 编译器 编译成 字节码,然后 字节码 交付给 虚拟机执行
熔岩脚本的字节码是包含很多东西的:熔岩虚拟机执行代码、文件资源常量数据、动态跟进的函数支持库
这代表你只需要有一个很简单的运行壳就能做到编译型语言一样到处游走到处耍的功能了,即时在陌生环境中没有你所调用的函数库也无关紧要,因为它们可以存在于字节码中
如果你会制作IDE,恭喜你你能利用这个脚本引擎再次制造一个属于你自己的"易语言"了
话不多说,图不多发,我就简简单单把我自己简单封装的 熔岩版精易模块 的代码发一下吧
还有许多特性作者懒得在此表述,如有需要可以进群学习探讨,QQ群:693632272
火山熔岩动态编程语言.zip
(1.74 MB, 下载次数: 177)
熔岩版精易模块代码:
//火山熔岩动态编程, 纯正的中文血统动态编程语言
整数型 文本_取出现次数(文本型 被搜索文本, 文本型 欲搜索文本, 逻辑型 是否区分大小写)//返回指定文本中指定内容出现的次数
整数型 dwSeaLen
整数型 位置_
整数型 i
dwSeaLen = 取文本长度 (欲搜索文本)
如果真 (取文本长度 (被搜索文本) > 0 && dwSeaLen > 0 )
位置_ = 寻找文本 (被搜索文本, 欲搜索文本, , 取反(是否区分大小写))
判断循环 (位置_ != -1 )
i++
位置_ = 寻找文本 (被搜索文本, 欲搜索文本, 位置_ + dwSeaLen)
返回 (i)
逻辑型 取反(逻辑型 取反值)
如果 取反值
返回 假
否则
返回 真
文本型 文本_取出中间文本(文本型 欲取全文本, 文本型 前面文本, 文本型 后面文本, 整数型 起始搜寻位置, 逻辑型 是否不区分大小写)//比如:欲取全文本为“12345”,现在要取出“3”,<3>的前面为“2”,<3>的后面为“4”,
整数型 局_前面文本位置
整数型 局_后面文本位置
文本型 局_前面文本
文本型 局_后面文本
局_前面文本 = 子文本替换(前面文本, "#引号" , #引号)
局_后面文本 = 子文本替换(后面文本, "#引号" , #引号)
局_前面文本位置 = 寻找文本(欲取全文本, 局_前面文本, 起始搜寻位置, 是否不区分大小写)
如果 局_前面文本位置 != -1
局_前面文本位置 = 局_前面文本位置 + 取文本长度(局_前面文本)
局_后面文本位置 = 寻找文本(欲取全文本, 局_后面文本, 局_前面文本位置, 是否不区分大小写)
如果 局_后面文本位置 != -1
返回(取文本中间(欲取全文本, 局_前面文本位置, 局_后面文本位置 - 局_前面文本位置))
返回("" )
整数型 文本_取行数(文本型 欲取行数文本)//取一个文本共有有多少行。
文本型[] 文本数组
文本数组 = 分割文本(欲取行数文本, #换行符)
返回 文本数组.取数组成员数()
文本型 文本_取头位(文本型 原文本, 整数型 取出数量)
返回(文本替换(原文本, 取出数量 + 1 , 取文本长度(原文本) - 取出数量, "" ))
整数型 文本_取文本所在行(文本型 源文本, 文本型 欲查找的文本, 逻辑型 是否区分大小写)//查找某段字或关键中在文本中的哪一行出现,成功返回行数,失败返回0
文本型[] 局_文本
整数型 局_计次
局_文本 = 分割文本(源文本, #换行符)
计次循环(取数组成员数(局_文本), 局_计次)
如果真(寻找文本(局_文本[局_计次], 欲查找的文本, , 取反(是否区分大小写)) != -1 )
返回(局_计次)
返回(0 )
文本型 文本_取随机范围数字(整数型 起始数, 整数型 结束数, 整数型 单双选择)
整数型 临时整数
如果 起始数 == 结束数
返回(到文本(起始数))
否则 起始数 > 结束数
临时整数 = 取随机数(结束数,起始数)
否则
临时整数 = 取随机数(起始数,结束数)
分支判断(单双选择)
分支 (1 )
如果真(临时整数 % 2 == 0 )
如果 临时整数 == 结束数
临时整数 = 临时整数-1
否则
临时整数 = 临时整数+1
返回(到文本型(临时整数))
分支 (2 )
如果真(临时整数 % 2 == 1 )
如果 临时整数 == 结束数
临时整数 = 临时整数 - 1
否则
临时整数 = 临时整数 + 1
返回(到文本(临时整数))
默认分支()
返回(到文本(临时整数))
文本型 文本_两极取中间(文本型 文本, 文本型 左面, 文本型 右面)
整数型 位置1
整数型 位置2
位置1 = 寻找文本(文本, 左面) + 取文本长度(左面)
位置2 = 倒找文本(文本, 右面)
返回(取文本中间(文本, 位置1, 位置2 - 位置1))
文本型 文本_删除空行(文本型 操作文本)// 删除文本当中的空白行
文本型[0 ] W
整数型 I
文本型 R
W = 分割文本(操作文本, #换行符)
如果真(取数组成员数(W) != 0 )
计次循环(取数组成员数(W), I)
如果真(删首尾空(W [I]) != "" )
如果 R == ""
R = W [I]
否则
R = R + #换行符 + W [I]
返回(R)
文本型 文本_孤立空格(文本型 操作文本)//将文本中所有的连体空格替换为单个空格
文本型 暂存
暂存 = 操作文本
判断循环(寻找文本(暂存," " ) != -1 )
暂存 = 子文本替换(暂存, " " ," " )
返回(暂存)
文本型 文本_取指定变量文本行(文本型 文本, 整数型 行号)//成功返回指定的文本行文本,失败返回空文本。
文本型[] 文本数组
文本数组 = 分割文本(文本, #换行符)
如果真 (行号 <= 0 )
返回("" )
如果真 (行号 > 取数组成员数(文本数组))
返回("" )
返回(文本数组[行号])
空 娱乐_输出九九乘法表()
整数型 I
整数型 K
计次循环(9 , I)
计次循环(I, K)
标准输出(K + "x" + I + "=" + I*K + " " )
输出换行()
标准输入()
文本型 文本_插入到某行(文本型 源文本, 文本型 欲插入文本, 整数型 欲插入某行后)
文本型[] 文本数组
文本型[] 中断数组
文本型 返回文本
整数型 索引
文本数组 = 分割文本(源文本, #换行符)
如果 欲插入到某行后 == 取数组成员数(文本数组)
加入成员(文本数组, 欲插入文本)
否则
索引 = 欲插入到某行后
判断循环 索引 < 取数组成员数(文本数组)
索引 = 索引 + 1
加入成员(中断数组, 文本数组[索引])
删除成员(文本数组, 索引)
加入成员(文本数组, 欲插入文本)
计次循环(取数组成员数(中断数组), 索引)
加入成员(文本数组, 中断数组[索引])
计次循环(取数组成员数(文本数组), 索引)
如果 返回文本 == ""
返回文本 = 文本数组[索引]
否则
返回文本 = 返回文本 + #换行符 + 文本数组[索引]
返回(返回文本)
文本型 文本_数组合并(文本型[] 欲合并文本数组, 文本型 合并符)//连接数组,类似VB中的join方法,合并一个文本数组到字符串。
文本型 返回文本
整数型 I
计次循环 (取数组成员数(欲合并文本数组), I)
如果 返回文本 == ""
返回文本 = 欲合并文本数组[I]
否则
返回文本 = 返回文本 + 合并符 + 欲合并文本数组[I]
返回 返回文本
文本型 文本_取左边(文本型 被查找的文本, 文本型 欲寻找的文本, 整数型 起始搜寻位置, 逻辑型 是否不区分大小写)//从文本的左边按 欲寻找的文本 开始寻找
整数型 局_长度
整数型 局_起始搜寻位置
整数型 局_方向
整数型 局_找到的位置
文本型 局_返回结果
局_长度 = 取文本长度(被查找的文本)
局_起始搜寻位置 = 起始搜寻位置
如果真 (局_起始搜寻位置 < 0 )
局_起始搜寻位置 = 局_起始搜寻位置 * -1
如果真 (局_起始搜寻位置 == 1 )
局_起始搜寻位置 = 0
局_方向 = 1
如果 局_方向 == 1
局_找到的位置 = 倒找文本(被查找的文本, 欲寻找的文本, 局_长度 - 局_起始搜寻位置 + 1 , 是否不区分大小写)
否则
如果真 (局_起始搜寻位置 == 0 )
局_起始搜寻位置 = 1
局_找到的位置 = 寻找文本(被查找的文本, 欲寻找的文本, 局_起始搜寻位置, 是否不区分大小写)
如果真 (局_找到的位置 == -1 )
返回 ("" )
局_返回结果 = 取文本左边(被查找的文本, 局_找到的位置 - 1 )
返回(局_返回结果)
文本型 文本_取右边(文本型 被查找的文本, 文本型 欲寻找的文本, 整数型 起始搜寻位置, 逻辑型 是否不区分大小写)//从文本的右边按 欲寻找的文本 开始寻找, 取行右边 (“1234567890”, “5”, 1, 真)
整数型 局_长度
整数型 局_起始搜寻位置
整数型 局_方向
整数型 局_找到的位置
文本型 局_返回结果
局_长度 = 取文本长度(被查找的文本)
局_起始搜寻位置 = 起始搜寻位置
如果真 (局_起始搜寻位置 < 0 )
局_起始搜寻位置 = 局_起始搜寻位置 * -1
如果真 (局_起始搜寻位置 == 1 )
局_起始搜寻位置 = 0
局_方向 = 1
如果 局_方向 == 1
如果真 (局_起始搜寻位置 == 0 )
局_起始搜寻位置 = 1
局_找到的位置 = 寻找文本(被查找的文本, 欲寻找的文本, 局_起始搜寻位置, 是否不区分大小写)
否则
局_找到的位置 = 倒找文本(被查找的文本, 欲寻找的文本, 局_长度 - 局_起始搜寻位置 + 1 , 是否不区分大小写)
如果真 (局_找到的位置 == -1 )
返回("" )
局_返回结果 = 取文本右边(被查找的文本, 局_长度 - 取文本长度(欲寻找的文本) - 局_找到的位置 + 1 )
返回(局_返回结果)
文本型 文本_替换行内容(文本型 文本, 整数型 行数, 文本型 替换内容)//替换指定行整行内容,返回替换后的文本。
文本型 输出文本
整数型 计次
文本型[] 临时文本
整数型 局_总数
临时文本 = 分割文本(文本, #换行符)
局_总数 = 取数组成员数(临时文本)
如果真 (行数 > 局_总数)
调试输出("传入行数大于实际文本行" )
返回 ("" )
临时文本[行数] = 替换内容
计次循环(局_总数, 计次)
如果真 (取数组成员数(临时文本) != 计次)
输出文本 = 输出文本 + 临时文本[计次] + #换行符
到循环尾()
输出文本 = 输出文本 + 临时文本[计次]
清除数组(临时文本)
返回(输出文本)
整数型 文本_取文本行出现次数(文本型 被搜寻文本, 整数型 行数)//取某行文本共出现了多少次,不存在返回-1。
文本型[] 文本数组
整数型 出现的次数
文本数组 = 分割文本(被搜寻的文本, 文本_取指定变量文本行(被搜寻的文本, 行数))
出现的次数 = 取数组成员数(文本数组) - 1
如果 出现的次数 < 0
清除数组(文本数组)
返回(-1 )
否则
清除数组(文本数组)
返回(出现的次数)
空 鼠标_双击(整数型 横坐标, 整数型 纵坐标)
鼠标_单击(横坐标,纵坐标,1 )
鼠标_单击(横坐标,纵坐标,1 )
//类型: 1 = 鼠标左键单击;2 = 鼠标右键单击;3 = 鼠标左键按住不放;
空 鼠标_单击(整数型 横坐标,整数型 纵坐标,整数型 类型)
整数型 X = 取鼠标水平位置()
整数型 Y = 取鼠标垂直位置()
整数型 局_标志
如果(类型 == 0 )
类型 = 1
如果(横坐标 == 0 )
横坐标 = X
如果(纵坐标 == 0 )
纵坐标 = Y
如果真(类型 > 0 && 类型 < 4 )
分支判断(类型)
分支(1 )
局_标志 = 6
分支(2 )
局_标志 = 24
分支(3 )
局_标志 = 3
鼠标_绝对移动(横坐标, 纵坐标)
mouse_event (局_标志,横坐标,纵坐标,0 ,0 )
//类型: 0.敲击 1.按下 2.放开
空 键盘_单击(整数型 键代码, 整数型 类型)
分支判断(类型)
分支(0 )
keybd_event (键代码,0 ,0 ,0 )
延迟(30 )
keybd_event (键代码,0 ,2 ,0 )
分支(1 )
keybd_event (键代码,0 ,0 ,0 )
分支(2 )
keybd_event (键代码,0 ,2 ,0 )
逻辑型 文件_下载(文本型 下载地址, 文本型 保存路径)
文本型 新地址
文本型 新路径
整数型 计次
如果(寻找文本(下载地址,"://" ) == -1 )
新地址 = "http://" + 下载地址
否则
新地址 = 下载地址
如果(文件是否存在(保存路径))
如果(删除文件(保存路径))
新路径 = 保存路径
否则
返回(假)
否则
新路径 = 保存路径
//DeleteUrlCacheEntry(新地址)
返回(URLDownloadToFileA (0 ,新地址,新路径,0 ,0 ))
#DLL "urlmon.dll" 整数型 URLDownloadToFileA URLDownloadToFileA (整数型,文本型,文本型,整数型,整数型)
#DLL "user32.dll" 整数型 keybd_event keybd_event (整数型,整数型,整数型,整数型)
#DLL "user32.dll" 空 mouse_event mouse_event (整数型,整数型,整数型,整数型,整数型)//标志组合,水平方向,垂直方向,数据信息,扩展数据信息
#DLL "user32.dll" 空 鼠标_绝对移动 SetCursorPos (整数型,整数型)//横坐标,纵坐标
#DLL "shlwapi.dll" 文本型 文件_取扩展名 PathFindExtensionA (文本型) //欲取扩展名的文件
#DLL "shlwapi.dll" 逻辑型 文件_改扩展名 PathRenameExtensionA (文本型,文本型) //欲改扩展名的文件,欲改成新的扩展名
#DLL "user32.dll" 整数型 消息框 MessageBoxA (整数型,文本型,文本型,整数型) //父窗口,消息内容,标题,图标及按钮
#DLL "shlwapi.dll" 文本型 文件_取文件名 PathFindFileNameA (文本型) //文件全名
#DLL "Kernel32.dll" 逻辑型 删除指定文件 DeleteFileA (文本型) //欲删除文件名
#DLL "user32.dll" 逻辑型 投递消息 PostMessageA (整数型,整数型,整数型,整数型) //hwnd,消息号,消息参数1,消息参数2
评分
查看全部评分