EBNF语法解析模块

4 投票
2 回答
2278 浏览
提问于 2025-04-17 09:08

你知道有没有那种语法解析模块吗?比如用Ruby、Python或JavaScript写的,给它一堆符号(我们称之为“tokens”)和一个类似于EBNF的语法规则(就用简单的字符串表示),它能返回一个解析树?我找到的最接近的就是SimpleParse,这是一款不错的库,但可惜它只支持一步解析(没有符号分解)。如果可以的话,我更希望不使用那些和语言本身紧密结合的库,比如pyparsingtreetop等等。

我不担心符号分解的问题,因为有很多现成的库可以用(自己写一个也挺简单),但实现一个EBNF解析器可不是一件简单的事。我查过Python的维基LanguageParsing,试过一些库,但都没成功(也许是我没找到我想要的那个,毕竟选择太多了...)

2 个回答

1

如果你对Clojure有一点了解,我发现Instaparse非常不错。你可以用“普通”的EBNF写成多行字符串(或者放在一个单独的文件里),而且它还扩展了EBNF的功能,不仅支持无上下文文法,还能处理有上下文的文法(不过我自己没怎么尝试过这个)。

1

经过一番搜索,我决定采用常见的 lex/yacc 方法,使用 Jison 来处理 node.js

撰写回答