我想创建一个可用于解析简化的降价语法的raku语法。降低的降价语法必须满足以下条件:
为了解析此语法,我创建了以下脚本:
#!/usr/bin/perl6
use v6;
grammar gram {
token TOP {
<text>
}
token text {
[ <section> ]+
}
token section {
<headline> <textline>*
}
token headline {
^^ [<hashheadline> | <underlineheadline>] $$
}
token hashheadline {
<hashprefix> <headlinecontent>
}
token hashprefix {
[\#] <space>
}
token underlineheadline {
<headlinecontent> [\n] <underline>
}
token underline {
[\-]**2..*
}
token headlinecontent {
[\N]+
}
token textline {
^^ (<[\N]-[\#]> (<[\N]-[\ ]> [\N]*)? )? [\n] <!before [\-][\-]>
}
}
my @tests = "", #should not match and doesn't match - OK
"test1", #should not match and doesn't match - OK
"test2\n", #should not match and doesn't match - OK
"test3\nnewline", #should not match and doesn't match - OK
"test4\n----", #should match and does match - OK
"test5\n----\nnewline", #should match but doesn't match - NOK
"#test6\nnewline", #should not match and doesn't match - OK
"# test7\nnewline", #should match but doesn't match - NOK
"# test8", #should match and does match - OK
"test9\n----\nnewline\nanother\nnew line", #should match but doesn't match - NOK
"# test10\nnewline\nhead\n---\nanother", #should match but doesn't match - NOK
;
for @tests -> $test {
say gram.parse($test).perl;
}
但是我对此语法有疑问:如测试数组的注释所述,语法有问题,但我不知道是什么。
将textline
令牌更改为:
token textline { \n* <!before <headline>> \N+ \n? }
我没有考虑过该更改是否是您真正想要的,但这意味着您的测试将按您指定的方式工作。
通常,使用CommaIDE开发语法。大多数问题(例如您发布的问题)的位置立即变得显而易见。(解决方案当然是一个不同的步骤,但是找出问题通常是大部分工作。)
通常,通过生成最小示例来调试非显而易见的问题(请参阅我对问题的评论中提供的链接,但跳过可重复的部分)。
这样做通常是最快速地找出任何非显而易见的问题所在的最有效方法。
这也是一个有趣的游戏,通过将您的直觉与宽松的二进制印章之类的方法相结合,您将可以更快地进行游戏。
通常,在对SO提出问题时,请首先生成一个“最小示例”(如上所述),然后使其成为“最小可复制示例”(以“最小示例”为基础)。(您问题中的示例是100%可复制的-谢谢!-但我正在为其他读者和您编写此答案。)
最小的可复制示例是您自己的洞察力和效率问题,而这对于其他人来说都是礼貌和礼貌。一旦了解了问题所在,解决您的问题就花了我大约1分钟的时间。但是我花了15分钟来做您将要做的“最好”的事情,然后再在这里提出一个问题:
最适合您,因为它很有趣(并且将稳定地提高您的错误查找生产力)。
最适合我,享有应有的乐趣应该是您的。
最适合试图回答您问题的其他所有人,因此我们不会重复不必要的工作。
最适合以后的读者,他们获得的简单问题可以解决真正的困惑,而不幸的是复杂的问题使真正的问题难以理解,从而失去了对读者的价值。
最适合于Rakoons,因为张贴“最少可复制的示例”是主持人和StackOverflow的常规读者认为这是一个好问题的基本要素,这意味着他们更有可能认真对待Raku,帮助我们缓解问题并成为Rakoons。
就是说,我并不是要劝阻您问问题,要远离它。如果在阅读并尝试应用“最小可复制示例”页面中的指南后,发现自己仍在挣扎中,请继续提出问题,并在问题中解释您在制作最小和/或可复制示例时遇到的任何问题,因为那会有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句