我使用过的第一个解析器生成器是Parse::RecDescent,它提供的指南/教程非常棒,但它最有用的功能是它的调试工具,特别是跟踪功能(通过将$RD_TRACE设置为1来激活)。我正在寻找一个可以帮助您调试其规则的解析器生成器。
问题是,它必须用Python或Ruby编写,并且具有详细模式/跟踪模式或非常有用的调试技术。
有谁知道这样的解析器生成器吗?
编辑
当我说调试时,我指的不是调试Python或Ruby,我指的是调试解析器生成器,看看它在每一步都在做什么,看看它阅读的每个字符,它试图匹配的规则。
编辑
我正在寻找一个解析器生成器框架,以及它的一些调试功能的说明。我对pdb不感兴趣,但对解析器的调试框架感兴趣。另外,请不要提到treetop。我对它不感兴趣。
5条答案
按热度按时间xiozqbni1#
Python是一种非常容易调试的语言,你可以直接导入pdbpdb.settrace()。
但是,这些解析器生成器应该具有良好的调试功能。
http://www.antlr.org/
http://www.dabeaz.com/ply/
http://pyparsing.wikispaces.com/
响应赏金
下面是PLY调试的实际操作。
源代码
产出
在parser.out生成的解析表
cqoc49vn2#
我对它的调试特性一无所知,但我听说过PyParsing的好东西。
http://pyparsing.wikispaces.com/
dsf9zpds3#
我知道赏金已经有人认领了,但这里有一个用pyparsing编写的等价解析器(加上对零个或多个逗号分隔参数的函数调用的支持):
此测试代码通过其基本速度运行解析器:
给出以下输出:
为了调试,我们添加以下代码:
现在我们重新解析第一个测试(显示输入字符串和一个简单的列标尺):
给出以下输出:
Pyparsing还支持packrat解析,这是一种解析时记忆(在这里阅读更多关于packrat的内容)。下面是相同的解析序列,但启用了packrat:
这是一个有趣的练习,有助于我了解其他解析器库的调试特性。
gudnpqoy4#
上面的ANTLR具有生成人类可读和可理解的代码的优势,因为它是(一个非常复杂和强大的)自顶向下的解析器,所以你可以用常规的调试器逐步通过它,看看它到底在做什么。
这就是为什么它是我选择的解析器生成器。
自下而上的解析器生成器(如PLY)有一个缺点,即对于较大的语法,几乎不可能理解调试输出的真正含义以及解析表为什么是这样的。
w46czmvw5#
Python wiki有一个用Python编写的list解析器。