
1. 引言经过一段时间的打磨我的自制 DSL 终于迎来了新版1.2版本的发布。这篇文章将完整记录这次版本迭代的核心设计思路、关键改动以及落地过程中的踩坑经验希望能给同样在探索 DSL 设计的开发者一些参考。3. 新版核心特性本次新版自制语言发布带来了以下关键能力升级支持联接汇编只支持编译后的支持函数定义暂时不支持参数示例定义函数原理识别到funstart开始录入下方代码识别到funend结束使用录入代码ifgog1:ifrealcs[0]funend:gog0funname[name]fcode fcodecur_fun_namereturnNone使用代码跟原解析逻辑一样else:lst[]kkkkk0resrcodefunname[realcs[0]].split(\n)print(rcode)#fileml.all2([start()])bl.to2(rcode)foriinrange(0,len(rcode)-1,1):lst[rcode[i]]cccccall2(lst)resresstr(ccccc)\nbl.to(ccccc)returnres5. 代码示例下面是一个简单的规则定义示例print(1) fz(a) ({a},1) print(ok) end() loop(1)对应的解析核心片段ifrealcs[0]:cvcvrealcsz.split(,)ifcvcv[0].strip()cvcv[1].strip():ifft1else:ifft0returnNoneifrealcs[0]:cvcvrealcsz.split(,)iffloat(cvcv[0])float(cvcv[1]):ifft1else:ifft0returnNoneifrealcs[0]:cvcvrealcsz.split(,)iffloat(cvcv[0])float(cvcv[1]):ifft1else:ifft0returnNone函数定义代码funstart(s) print(10) funend() s() loop(1)汇编连接代码importpy(hb.py) py(run_bin(test.bin))在这里填入你放在hb文件夹的bin汇编文件夹 loop(10)6. 踩坑与经验这次迭代过程中遇到1个值得记录的问题函数无法使用无法正常调用7. 后续规划下一阶段的重点方向包括提供可视化规则编辑界面增加更多内置函数库完善文档与示例工程探索编译到原生代码的路径8. 总结自制 DSL 的迭代是一个持续演进的过程。新版在语法表达力、解析性能和运行时能力上都有明显提升但更重要的是建立了一套可扩展的架构基础。希望这篇文章能给你带来启发也欢迎在社区交流 DSL 设计中的各种问题。社区