4

你知道一个语法解析器模块(用 Ruby、Python、Javascript...编写),给定一个标记列表和一个类似EBNF的语法(作为一个简单的字符串传递),返回解析的树?我发现最接近这个的是SimpleParse,这是一个不错的库,但不幸的是它使用单步解析(无标记化)。如果可能的话,我宁愿不使用实现与语言本身纠缠在一起的库(pyparsingtreetop,...)。

我不担心词法分析/标记化,因为有很多可用的库(甚至编写自己的库也很容易),但实现 ENBF 解析器并不是一件容易的事。我检查了 Python wiki LanguageParsing并测试了其中一些无济于事(也许我忽略了我正在寻找的那个,有这么多......)

4

2 回答 2

1

经过更多搜索后,我决定采用典型的 lex/yacc 方法,将Jison用于node.js

于 2012-01-23T11:01:34.433 回答
1

如果您完全熟悉 Clojure,我会发现Instaparse很棒。您可以将“vanilla”EBNF 编写为多行字符串(或在单独的文件中,它甚至将 EBNF 从上下文无关语法扩展到上下文相关语法(尽管我没有玩过那么多)。

于 2015-07-15T13:13:46.207 回答