perl6语法,错误报告

问题描述:

如果语法不匹配,有没有办法让perl6生成错误消息?或者至少返回它处理的最后一个数据的位置?如果我从解析器中得到的是'不匹配',那么解决语法错误是相当困难的。perl6语法,错误报告

如果您的重点是为您的语法用户生成消息,请参阅Generating Good Parse Errors from a ParserGrammar::ErrorReporting

这个答案的其余部分是关于调试。

首先,您可以在Perl 6正则表达式中嵌入任意闭包(代码)。 (只需在正则表达式中键入{ your code goes here })。因此,您可以将{ say ... }声明放在有助于调试的语句中。

但有更好的选择。

你使用“电池包括”Rakudo星分布? (除非你有充分的理由不这样做)。如果是这样,你可以添加use Grammar::Tracer;(如幻灯片http://www.jnthn.net/papers/2011-yapceu-grammars.pdf中所述)以获得完整的分析结果。

我个人的偏好是使用Rakudo调试器,该调试器提供Grammar :: Tracer所做的一切以及除了所有Perl 6代码(包括正则表达式和语法)的单步执行,断点等以外的更多功能。调试器在这个video中引入。

如果您还有其他问题,我建议您访问始终友好的IRC channel #perl6