有没有能够在Go中处理递归语法的解析器?

有没有能够在Go中处理递归语法的解析器?,go,antlr4,ragel,Go,Antlr4,Ragel,在Node.js项目中,我在ANTLR4(js目标)中编写了一个查询解析器。用户查询具有简化的类似SQL的语法,然后在服务器上处理为完整的SQL。查询结构可以任意嵌套 我现在正在移植这个应用程序。目前,没有可供go使用的ANTLR4目标。我开始探索,但根据文档,它需要一个规则的语法,不处理递归,除了像平衡括号这样非常简单的任务 另一个解决方案是使用我的ANTLL4语法和C++目标,然后链接C++类,与SWIG(或某物)一起,它们感觉有毛发和最后的解决方案类型。 另一种解决方案是在客户端进行解析,

在Node.js项目中,我在ANTLR4(js目标)中编写了一个查询解析器。用户查询具有简化的类似SQL的语法,然后在服务器上处理为完整的SQL。查询结构可以任意嵌套

我现在正在移植这个应用程序。目前,没有可供go使用的ANTLR4目标。我开始探索,但根据文档,它需要一个规则的语法,不处理递归,除了像平衡括号这样非常简单的任务

另一个解决方案是使用我的ANTLL4语法和C++目标,然后链接C++类,与SWIG(或某物)一起,它们感觉有毛发和最后的解决方案类型。 另一种解决方案是在客户端进行解析,但这会使客户端下载所需的js数量激增。也觉得有点绝望

所以我的问题是:

1) 是否有任何解析器库能够处理从Go可用的递归语法


2) 我对ragel完全不熟悉,因为它似乎是一个相当复杂的工具,我想在花时间学习它之前弄清楚:如果语法足够简单,有没有办法在ragel中处理一些递归(比如达到某个级别)?

标准库有一个YACC端口,我想它会工作的(虽然很难看)有很多与生成解析器相关的包。你应该能够用它们一起构建解析器。Go-target正在开发中。你可以试着问问作者:@kvantt我知道,我关注了github上的讨论。据我所知,它还远没有准备好生产。