原始代码
保留最初代码是为了保留思维路程
设计思路是逐行解析,每行只处理一个代码语法,所以一行不允许写入多个关键字,
如:
me # 正确语法
me me # 不允许
有两个文件,一个是 iota2str , 功能是把 Ducky Peripherals mod 中 focal_port 里的核心的 图案列表读取出来转换成 lua表格式的字符串,以用来在另一个文件中使用
另一个文件是 hexCompiler ,其中的 hexMap 是关键字到图案的映射表,使用需要带一个参数,而参数则是你想编译的文件文件名,代码默认如果检测到 focal_port,则会向其写入最终的输出iota
源码文件一行一个命令
目前提供的 hexMap 并不是完善版本,具体映射表最好还是自己设置,每个人的语言习惯都不同,所以只提供部分映射以供参考
source_code:
{
me
pos
me
sight
me
me
me
pos
{
{
unpack
}
}
}
output:
无定型图案生成版
后续添加了生成数字图案和移除栈指定元素的图案的版本,提供两个版本,除了数字图案生成规则之外代码一致,语法匹配切换成了正则表达式,可以自由拓展。
移除指定栈元素语法定义:
rm 位置
详细可以见参考代码
hexCompiler_multiPattern - Pastebin.com :
通过堆栈式的十进制遍历每一位来生成计算图案列表,如果数字位数为 N > 1,图案列表长度为 4(N-1) + 2, N = 1 时长度为 1
hexcompiler_infinityTri - Pastebin.com :
因为Ducky Peripherals 允许生成重叠图案,于是就有这个版本,通过直接重叠绘画以一个图案实现数字常量,图案列表长度为 1
参考代码:
{
me
rm 1
me
sight
{
0
12
456
}
rm 2
}
添加包, 函数和注释功能
注释
注释可以是整行注释,也可以注释在代码行后面,关键字是 #
注释代码:
# this is a comment
get_sightCastBlock() # get the sight cast block pos
dig # dig pos block
函数
添加了函数功能,函数在文件中定义,没有参数,更类似 C 的宏定义替换。定义函数以 @func 函数名 开始,以 @end 结束,调用时,使用 函数名加括号: 函数名() 来实现函数调用。如果要调用函数,需要保证函数的定义在调用之前。
@func get_sightCastBlock
me
pos
me
sight
get_block
@end
get_sightCastBlock()
包
出于对复用功能的考虑,提供了包。包是函数的集合,是一种特殊的文件,与普通文件相比,就是只有函数定义,没有其他普通代码,一个文件中不允许出现在函数体之外的代码,否则会解析不正常。使用 @include 文件路径 关键字来导入包。
这里提供一个示范,将函数写在 tools 中,但是在tst中去调用该函数。
tools:
@func get_sightCastBlock
me
pos
me
sight
get_block
@end
tst:
@include tools
get_sightCastBlock()
输出:
源代码:HexCompiler - Pastebin.com
一些工具
为了更好的在游戏内进行即时编辑,制作了两个工具,并且将之前的编译器文件中的共用表提出作为单独的文件,也是为了更方便的修改,编译器使用方式和之前一致,只不过hexMap表需要在hexMap文件中进行编辑和完善,下面提供的两个工具都依赖于hexMap文件中的hexMap映射表
代码编辑器
hedit 是我对cc自带的edit进行修改以实现在编辑时自动语法补全和高亮对应的关键词,使用和edit一样,只不过run被我替换成 compile,如果运行 hedit 的电脑连接了 focal_port 外设,则会显示 compile 选项,这会将当前的文件编译成iota写入 focal_port 中,其中的语法高亮和补全依赖于 hexMap中已经实现的映射
辅助工具
iotaTools 文件是一个三个功能合一的工具,使用方式为 : iotaTools <命令> <参数>
可以对focal_port 中存有图案列表的iota进行一些方便的操作
命令的类型有:
toStr:和之前的iota2str工具一致,将focal_port中的iota 转换为字符串存入 data 文件中
dec: 反编译工具,读取 focal_port 中的 iota,根据你自己实现的hexMap映射转译为你定义的代码格式,其中不存在的映射会将angles 值替代填入,反编译出的代码会存入 dec_out 文件中
append: 辅助完善hexMap工具,读取 focal_port 中的 iota,会查找该iota中在你的hexMap中不存在的映射,并添加对应缺省key值的映射到hexMap尾部,并存入 newHexMap 文件中,如果参数指定 overWrite,则会直接覆写 hexMap文件,该方法支持图案列表而不只单个图案
启动脚本
这个启动脚本是为了让程序可以自动补全路径,以及命令,如果不运行,无法自动匹配对应的程序路径和参数,只需要保存这个启动脚本为 startup.lua即可,或是将其加入你自己的启动脚本,如果不使用它,每个程序在运行一次后也可以进行路径补全或者参数补全。
如果要使得功能 正常运行,除hexStartup.lua文件之外的代码文件需要保持名字与pastebin上的文件名一致,或是从github下载后保持文件名不变
后续更新
之后如果有代码更新,则推到github上,也方便记录更新内容