news 2026/10/30 1:54:50

自制 DSL 新版发布:从设计到落地的完整实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自制 DSL 新版发布:从设计到落地的完整实践

1. 引言

经过一段时间的打磨,我的自制 DSL 终于迎来了新版1.2版本的发布。这篇文章将完整记录这次版本迭代的核心设计思路、关键改动以及落地过程中的踩坑经验,希望能给同样在探索 DSL 设计的开发者一些参考。

3. 新版核心特性

本次新版自制语言发布带来了以下关键能力升级:
支持联接汇编(只支持编译后的)
支持函数定义(暂时不支持参数)
示例

定义函数原理:

识别到funstart()

开始录入下方代码

识别到funend()

结束

使用

录入代码:

ifgog==1:ifrealcs[0]=='funend':gog=0funname[name]=fcode fcode=""cur_fun_name=""returnNone

使用代码(跟原解析逻辑一样):

else:lst=[""]kkkkk=0res=""rcode=funname[realcs[0]].split('\n')print(rcode)#fileml.all2(["start()"])bl.to2(rcode)foriinrange(0,len(rcode)-1,1):lst=[rcode[i]]ccccc=all2(lst)res=res+str(ccccc)+'\n'bl.to(ccccc)returnres

5. 代码示例

下面是一个简单的规则定义示例:

print(1) fz(a) ==({a},1) print(ok) end() loop(1)

对应的解析核心片段:

ifrealcs[0]=='==':cvcv=realcsz.split(',')ifcvcv[0].strip()==cvcv[1].strip():ifft=1else:ifft=0returnNoneifrealcs[0]=='<=':cvcv=realcsz.split(',')iffloat(cvcv[0])<=float(cvcv[1]):ifft=1else:ifft=0returnNoneifrealcs[0]=='>=':cvcv=realcsz.split(',')iffloat(cvcv[0])>=float(cvcv[1]):ifft=1else:ifft=0returnNone

函数定义代码:

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 设计中的各种问题。
社区

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/24 10:42:55

AI工作手机怎么选?剪流、云客、红鹰、鱼汛四大主流品牌场景适配详解

近几年&#xff0c;随着私域运营、电销合规化、企业客户资产精细化管理普及&#xff0c;AI工作手机已经成为大多数销售型企业的标配工具。不同于普通消费级手机&#xff0c;AI工作手机的核心价值在于合规留痕、员工行为规范化、客户资产留存以及AI销售赋能。目前市面上主流、市…

作者头像 李华
网站建设 2026/10/29 23:46:08

Python 自动化办公实战:用 openpyxl 批量处理 Excel 表格,告别重复手工操作

前言在日常工作中&#xff0c;很多小伙伴每天都要花费大量时间处理 Excel 表格&#xff1a;批量修改单元格内容、合并多个工作表、统计数据、设置单元格样式。重复的复制粘贴、筛选统计枯燥又容易出错&#xff0c;当表格数量达到几十上百份时&#xff0c;纯手工操作几乎难以完成…

作者头像 李华
网站建设 2026/10/25 21:08:48

Agent 任务中断后如何续跑?Caravel 同一会话接着聊实操(附三步截图)

摘要&#xff1a; CLI Agent 做到一半被打断&#xff0c;第二天重开终端只能重讲背景。本文演示 Caravel 把会话挂在任务上的做法&#xff1a;工作台找到原任务 → 打开后计划和历史仍在 → 输入框补一句从同一会话续跑。关掉的是窗口&#xff0c;不是任务。写在前面 产品&…

作者头像 李华
网站建设 2026/10/25 20:41:24

嵌入式电源路径保护:电子保险丝TPS259483与MCU协同设计方案

1. 电源路径保护为什么成了嵌入式设计里的老大难1.1 一个看起来不起眼、炸起来很要命的问题做嵌入式硬件的人&#xff0c;应该都有过这样的经历&#xff1a;整板调试通通正常&#xff0c;代码跑得欢天喜地&#xff0c;结果现场一接负载&#xff0c;电源啪一下掉电&#xff0c;或…

作者头像 李华
网站建设 2026/10/13 11:05:59

电子保险丝与MCU协同的工业电源保护方案设计

最近在给一块工业控制板做电源保护升级&#xff0c;核心器件选的是TPS259483AYWPR这颗电子保险丝和PIC18F47K42单片机。整套系统调完之后&#xff0c;最大的感受是&#xff1a;以前生怕负载短路烧板子&#xff0c;现在反而希望它短路一次&#xff0c;看看保护动作有多利落。这个…

作者头像 李华
网站建设 2026/10/13 0:33:05

REDox:用64位token压缩结构化数据内存占用

1. 当结构化数据遇上64位token&#xff1a;REDox到底在解决什么问题第一次看到REDox这个项目&#xff0c;是在一个数据密集型应用的性能优化讨论里。当时我们团队正在处理一个日志分析系统&#xff0c;每天要吞下几十GB的半结构化数据&#xff0c;内存占用一直是个绕不过去的坎…

作者头像 李华