寻找合适的 Ruby/Python 解析器生成器
我使用的第一个解析器生成器是 Parse::RecDescent,它的可用指南/教程很棒,但它最有用的功能是它的调试工具,特别是跟踪功能(通过将 $RD_TRACE 设置为 1 来激活)。 我正在寻找一个解析器生成器,可以帮助您调试它的规则。
问题是,它必须用 Python 或 Ruby 编写,并且具有详细模式/跟踪模式或非常有用的调试技术。
有谁知道这样的解析器生成器?
编辑
当我说调试时,我并不是指调试 Python 或 Ruby。 我指的是调试解析器生成器,看看它在每一步都在做什么,看看它正在读取的每个字符,它试图匹配的规则。
编辑
我正在寻找一个解析器生成器框架,以及它的一些调试功能的说明。 我对 pdb 不感兴趣,而是对解析器的调试框架感兴趣。 另外,请不要提及树顶。 我对此不感兴趣。
The first parser generator I've worked with was Parse::RecDescent, and the guides/tutorials available for it were great, but the most useful feature it has was it's debugging tools, specifically the tracing capabilities ( activated by setting $RD_TRACE to 1 ). I am looking for a parser generator that can help you debug it's rules.
The thing is, it has to be written in Python or in Ruby, and have a verbose mode/trace mode or very helpful debugging techniques.
Does anyone know such a parser generator ?
Edit
When I said debugging, I wasn't referring to debugging Python or Ruby. I was referring to debugging the parser generator, see what it's doing at every step, see every char it's reading, rules it's trying to match.
Edit
I am seeking a parser generator framework, and an illustration of some of its debugging features. I'm not interested in pdb, but in parser's debugging framework. Also, please don't mention treetop. I'm not interested in it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
Python 是一种非常容易调试的语言。 您只需执行 import pdb pdb.settrace() 即可。
然而,这些解析器生成器据说具有良好的调试设施。
http://www.antlr.org/
http://www.dabeaz.com/ply/
http: //pyparsing.wikispaces.com/
响应赏金
这里是实际的 PLY 调试。
源代码
输出解析表
在 parser.out 生成的
Python is a pretty easy language to debug. You can just do import pdb pdb.settrace().
However, these parser generators supposedly come with good debugging facilities.
http://www.antlr.org/
http://www.dabeaz.com/ply/
http://pyparsing.wikispaces.com/
In response to bounty
Here is PLY debugging in action.
Source Code
Output
Parse Table generated at parser.out
我对它的调试功能一无所知,但我听说过有关 PyParsing 的好消息。
http://pyparsing.wikispaces.com/
I don't know anything about its debugging features, but I've heard good things about PyParsing.
http://pyparsing.wikispaces.com/
我知道赏金已经被领取,但这里有一个用 pyparsing 编写的等效解析器(加上对带有零个或多个逗号分隔参数的函数调用的支持):
此测试代码通过其基本步调运行解析器:
以下输出:
给出 调试时,我们添加以下代码:
现在我们重新解析第一个测试(显示输入字符串和一个简单的列标尺):
给出以下输出:
Pyparsing 还支持 Packrat 解析,一种解析时记忆(阅读有关 packratting 的更多信息 此处)。 这是相同的解析序列,但启用了 Packrat:
这是一个有趣的练习,对我了解其他解析器库的调试功能很有帮助。
I know the bounty has already been claimed, but here is an equivalent parser written in pyparsing (plus support for function calls with zero or more comma-delimted arguments):
This test code runs the parser through its basic paces:
Gives this output:
For debugging, we add this code:
And now we reparse the first test (displaying the input string and a simple column ruler):
Giving this output:
Pyparsing also supports packrat parsing, a sort of parse-time memoization (read more about packratting here). Here is the same parsing sequence, but with packrat enabled:
This was an interesting exercise, and helpful to me to see debugging features from other parser libraries.
上面的 ANTLR 具有生成人类可读和可理解的代码的优点,
因为它是(一个非常复杂和强大的)自上而下的解析器,
这样你就可以使用常规调试器单步调试它
看看它到底在做什么。
这就是为什么它是我选择的解析器生成器的原因。
像 PLY 这样的自下而上的解析器生成器有缺点
对于更大的语法来说几乎不可能理解
调试输出的真正含义是什么以及为什么
解析表就是这样。
ANTLR above has the advantage to generate human readable and understandable code,
since it is (a very sophisticated and powerful) top-down parser,
so you can step through it with a regular debugger
and see what it really is doing.
That's why it is my parser generator of choice.
Bottom up parser generators like PLY have the disadvantage
that for larger grammars it is almost impossible to understand
what the debugging output really means and why the
parsing table is like it is.
Python wiki 有一个用 Python 编写的语言解析器列表。
Python wiki has a list of Language Parsers written in Python.