很多年前曾经痴迷和学习过Domain Specific Language的设计,试过flex/bison/antlr。
当时觉得这门技术属于“高大上”的范畴,实在高攀不起;现实世界里忙着工作糊口,也没有太多精力去深入学习。当时学习了一个calc.y的例子,但是发现写抽象语法本身就很抽象,想要写出复杂的语法很困难。
十几年过去了,AI时代的到来,让曾经高不可攀的技术高峰变得不再遥不可及。
比如,你用自然语言描述你的DSL的大概功能:
- 常用运算符
- 代码块,如C/C++的 { }
- 流控制 if-else/while
- 常用内置函数
- 常量声明:let constVar = value
- 变量声明:var varValueCanBeChanged = value
- 内置常量:true/false
AI就能根据你的描述自动生成相关的lexer/parser和一些支持类,仅仅需要一些无关底层框架的改动就可以使用。
比如我前面发布的一篇文章:一周体验腾讯 CodeBuddy:AI 编码助手真能“碾压”个人经验吗?-CSDN博客
我陆陆续续做了很多改进,也添加了很多新功能,其中之一就是实现了一个简单的有关文件的DSL。有兴趣的朋友可以去看看 FileDsl · master · neolib.net/MyHouseKeeper。