我想创建一个 raku 语法,可用于解析简化的 Markdown 语法。这种简化的降价语法必须满足以下条件:
为了解析这个语法,我创建了以下脚本:
#!/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;
}
Run Code Online (Sandbox Code Playgroud)
但是我对这个语法有问题:正如 test-array 的评论中所述,语法有问题,但我不知道是什么。
将textline令牌更改为:
token textline { \n* <!before <headline>> \N+ \n? }
Run Code Online (Sandbox Code Playgroud)
我没有考虑过这种更改是否是您真正想要的,但这意味着您的测试按您指定的方式工作。
通常,使用 CommaIDE 开发语法。大多数问题的位置(例如您发布的问题)立即变得显而易见。(解决方案当然是一个独特的步骤,但查明问题通常是大部分工作。)
通常,通过生成最小示例来调试不明显的问题(请参阅我对您的问题的评论中提供的链接,但跳过可重现的部分)。
这样做通常是相对快速地查明任何不明显问题所在的最有效方法。
这也是一个有趣的游戏,通过将你的直觉与松散的二进制印章式方法相结合,你会更快地玩这个游戏。
一般而言,在问关于 SO 的问题时,首先生成一个最小示例(如刚才讨论的),然后使其成为最小可重现示例(建立在最小示例上)。(你问题中的例子是 100% 可重复的——谢谢!——但我正在为其他读者和你写这个答案。)
一个最小的可重复示例对你自己来说是一个洞察力和效率的问题,对于其他人来说,这两者加上礼貌。一旦我了解问题所在,解决您的问题花了我大约 1 分钟。但我花了 15 分钟做了你会“最好”做的事情,然后再在这里提问:
最适合您,因为它很有趣(并且会稳步提高您的 bug 搜寻效率)。
对我来说是最好的,谁享受了本来应该属于你的乐趣。
最适合试图回答您的问题的其他人,这样我们就不会重复不必要的工作。
最适合后来的读者,他们会得到解决真正困惑的简单问题,而不是不幸的复杂问题,这些问题使真正的问题变得模糊不清,以至于失去了对读者的价值。
最适合 Rakoons,因为发布最少的可重复示例是 StackOverflow 的版主和普通读者认为一个好问题的基本要素,这意味着他们更有可能认真对待 Raku,帮助我们缓和我们的问题,并成为 Rakoons。
也就是说,我并不是要阻止你提出问题,远非如此。如果在阅读并尝试应用 Minimal Reproducible Example 页面中的指南后,您发现自己遇到了困难,请继续提问,并在问题中解释您在生成最小和/或可复制示例时遇到的任何问题,因为那会有所帮助。
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |