任何可以在Go中处理递归语法的解析器?

时间:2016-03-04 10:10:00

标签: go antlr4 ragel

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

我现在正在移植此应用程序。目前还没有ANTLR4目标。我开始探索Ragel但是根据文档,它需要一个常规语法并且不处理递归,除了平衡括号之类的非常简单的任务。

另一种解决方案是将我的ANTRL4语法与C ++目标一起使用,然后将C ++类链接到SWIG(或其他东西),感觉有点毛茸茸和最后的解决方案类型。

另一个解决方案是在客户端进行解析,但这会爆炸客户端下载所需的js数量。也感觉有点绝望。

所以我的问题是:

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

2)我对ragel完全不熟悉,因为它似乎是一个非常复杂的工具,我想在花时间学习它之前得到这个:有没有办法处理一些递归(比如说)如果语法足够简单,可以在ragel中达到一定的水平吗?

0 个答案:

没有答案