在一个 Node.js 项目中,我在 ANTLR4(JS 目标)中编写了一个查询解析器。用户查询具有简化的类似 SQL 的语法,然后在服务器上处理为完整的 SQL。查询结构可以任意嵌套。
我现在正在移植这个应用程序。目前,没有 ANTLR4 目标。我开始探索Ragel,但根据文档,它需要常规语法并且不处理递归,除了平衡括号等非常简单的任务。
另一个解决方案是将我的 ANTRL4 语法与 C++ 目标一起使用,然后将 C++ 类链接到 SWIG(或其他东西),这感觉有点毛茸茸,是最后的解决方案类型。
另一种解决方案是在客户端进行解析,但这会增加客户端下载所需的 js 数量。也觉得有些无奈。
所以我的问题是:
1) 是否有任何解析器库能够处理 Go 中可用的递归语法?
2)我对 ragel 完全不熟悉,因为它似乎是一个相当复杂的工具,我想在投入时间学习它之前弄清楚这一点:有没有办法在 ragel 中处理一些递归(比如达到一定水平),如果语法够简单吗?