有没有办法让Perl 6的产生一个错误消息,如果语法不匹配? 或者至少返回它处理的最后数据的位置? 这是非常难以解决的语法错误,所有我从解析器得到的是“不匹配”。
Answer 1:
如果你的注意力产生了对你的语法的用户的邮件,看到从分析器创造良好的解析错误和语法:: ERRORREPORTING 。
这个答案的其余部分是有关调试。
首先,可以在Perl嵌入任意封闭件(代码)6分的规则(或令牌或正则表达式)。 只需键入{ your code goes here }
在规则的中间。 所以,你可以只是洒{ say ... }
语句,其中用于调试很有帮助。 (请注意, $/
和其亲属$0
, $1
等,命名为子捕获$<foo>
等被自动更新以引用当前Match
对象和对应于所述包围规则进入闭合之前立即它的子捕获所以你可以反思如何匹配是在正则表达式这一点去。)
但也有更好的选择。
您是否使用Rakudo星分布“包括电池”? (你应该除非你有很好的理由不这样做。)如果是这样,你可以添加行use Grammar::Tracer;
(如在幻灯片描述http://www.jnthn.net/papers/2011-yapceu-grammars.pdf )得到一个解析的完整跟踪。
我个人的偏好是使用Rakudo调试器提供一切语法:: Tracer不对加了一大堆更多除了(单步执行,断点,所有Perl 6的代码,包括正则表达式和语法等)。 调试器在此介绍视频 。
如果你有任何问题,我建议你访问总是友好的IRC频道#perl6 。
文章来源: How can error reporting in grammars be improved?