我正在研究一种新的编程语言rip,但我无法深入到一些无限循环的底部。有没有办法在每个规则被调用时打印出来,这样我就可以看到正在递归的规则?我试过在脑海中浏览代码,但我没有看到它。任何帮助将非常感激。
问问题
276 次
3 回答
3
打补丁的方法其实是Parslet::Atoms::Context#lookup
。在 GitHub 上查看(永久链接到当前版本)。在您自己的代码中,您可以修补该方法以打印obj
如下:
class Parslet::Atoms::Context
def lookup(obj, pos)
p obj
@cache[pos][obj.object_id]
end
end
在调用解析器之前随时运行该代码parse
,它将生效。样本输出:
>> parser = ConsistentNewlineTextParser.new
=> LINES
>> parser.parse("abc")
LINES
(line_content:LINE_CONTENT NEWLINE){0, } line_content:LINE_CONTENT
(line_content:LINE_CONTENT NEWLINE){0, }
line_content:LINE_CONTENT NEWLINE
LINE_CONTENT
WORD
\\w{0, }
\\w
\\w
\\w
\\w
NEWLINE
dynamic { ... }
FIRST_NEWLINE
'? '
'
'?
'
'
'
LINE_CONTENT
=> {:line_content=>"abc"@0}
于 2013-03-31T08:00:29.247 回答
1
我想通了:编辑Parslet::Atom::Context#lookup
以输出obj
参数将在调用每个规则时显示它。
于 2013-03-27T03:31:39.570 回答
0
我的 Parslet 分支自动检测无限循环,并退出重复的报告表达式而不消耗任何东西。
https://github.com/nigelthorne/parslet
有关示例,请参阅Parse markdown 缩进代码块。
于 2015-10-14T12:07:43.960 回答