gpt4 book ai didi

raku:用于解析部分的 Markdown 语法

转载 作者:行者123 更新时间:2023-12-03 14:06:02 27 4
gpt4 key购买 nike

我想创建一个 raku 语法,可用于解析简化的 Markdown 语法。这种简化的 Markdown 语法必须满足以下条件:

  • Markdown 中的标题必须以“#”开头,后跟一个空格,或者必须用“-”序列(至少 2 个)加下划线。
  • 文字不能自立。它必须以标题开头。

  • 为了解析这个语法,我创建了以下脚本:
    #!/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 :

    token textline { \n* <!before <headline>> \N+ \n? }
    我没有考虑过这种更改是否是您真正想要的,但这意味着您的测试按您指定的方式工作。

    通常,使用 CommaIDE 开发语法。大多数问题的位置(例如您发布的问题)立即变得显而易见。 (解决方案当然是一个独特的步骤,但查明问题通常是大部分工作。)

    通常,通过生成最小示例来调试不明显的问题(请参阅我对您的问题的评论中提供的链接,但跳过可重现的部分)。
    这样做通常是相对快速地查明任何不明显问题所在的最有效方法。
    这也是一个有趣的游戏,通过将您的直觉与松散的 binary chop 相结合,您会更快地玩这个游戏。喜欢的方法。

    一般而言,在问关于 SO 的问题时,首先生成一个最小示例(如刚才讨论的),然后使其成为最小可重现示例(建立在最小示例上)。 (你问题中的例子是 100% 可重复的——谢谢!——但我正在为其他读者和你写这个答案。)
    一个最小的可重复示例对你自己来说是一个洞察力和效率的问题,对于其他人来说,这些事情加上礼貌。一旦我了解问题所在,解决您的问题花了我大约 1 分钟。但我花了 15 分钟做了你会“最好”做的事情,然后再在这里提问:
  • 最适合您,因为它很有趣(并且会稳步提高您的 bug 搜寻效率)。
  • 对我来说是最好的,谁享受了本来应该属于你的乐趣。
  • 最适合试图回答您的问题的其他人,这样我们就不会重复不必要的工作。
  • 最适合后来的读者,他们会得到解决真正困惑的简单问题,而不是不幸的复杂问题,这些问题是如此模糊真正的问题,以至于失去了他们对读者的值(value)。
  • 最适合 Rakoons,因为发布 Minimal Reproducible Examples 是版主和 StackOverflow 的普通读者认为一个好问题的基本要素,这意味着他们更有可能认真对待 Raku,帮助我们缓和我们的问题,并成为 Rakoons。

  • 也就是说,我并不是要阻止你提出问题,远非如此。如果在阅读并尝试应用 Minimal Reproducible Example 页面中的指南后,您发现自己遇到了困难,请继续提问,并在问题中解释您在生成最小和/或可复制示例时遇到的任何问题,因为那会有所帮助。

    关于raku:用于解析部分的 Markdown 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66397686/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com