本周在拼死拼活考前突击 编译原理 ,学了词法、文法的分析,去年打 RMDB 比赛分析SQL时也用了Bison、Yacc那一套。总的来说这一切还是很有意思的,毕竟解答了多年的疑问:怎么设计一个编程语言?
当然最近也在实践 AI 原生工作流的开发框架,之前本来要做一个类似 Dify 的应用的(甚至已经报上去作为 专业创新实践 课的课设),但既然已经那么多类似的产品了,况且这种平台工作量巨大,便放弃了这个想法,设计了这个 Flowity 语言。当然目前只是做起来玩玩的。
Python 实现的解释器开源在:https://github.com/RockChinQ/Flowity
语法
Flowity 试图把使用者的重心放到 Prompt 上。
Hello, who are you?
$resp = $query()
$end($str)
任何不以 $ 开头的语句都将被视为 Prompt,后续只需要调用 $query() 即可直接获得 LLM 的响应。目前设计是所有的 符号
(变量、函数) 都需要以 $ 开头(有点PHP了),而 Prompt 则不需要以任何符号包围。但最近在做表达式解析的时候出了点问题,表达式内部的运算符和其后的 直接数 可能会被视为 Prompt。故 Lexer 和 Parser 需要重新构造一下。
运行时
当然直接解释执行。用 PLY 做的 Lexer 和 Parser,由 runtime 的一个 递归函数 解释执行代码,使用一个 Context 类存储 符号表、解释器状态、返回值 等信息。
![](https://rockchin.top/wp-content/uploads/2024/06/image-877x1024.png)
运行来试试看:
![](https://rockchin.top/wp-content/uploads/2024/06/image-1-826x1024.png)
目标
也许直接使用 Python 就可以实现这样的操作,但单独做一个语言,方便解藕 基础服务(LLM) 和 AI App 的逻辑代码,提供了更高的可扩展性。后续计划会实现 由 LLM 决定的 分支跳转等特性,实现更多 LLM 风格的编程方式。
发表回复