首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >raku:用于解析部分的markdown语法

raku:用于解析部分的markdown语法
EN

Stack Overflow用户
提问于 2021-02-27 18:15:23
回答 2查看 134关注 0票数 6

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

markdown中的标头必须以'#‘开头,后跟空格,或者必须用'-’序列(至少2)加下划线。

一个文本不能独立存在。它的前面必须有一个标头。

为了解析这个语法,我创建了以下脚本:

代码语言:javascript
复制
#!/usr/bin/perl6

use v6;

grammar gram {
    token TOP {
        
    }
    token text {
        [  ]+
    }
    token section {
         *
    }
    token headline {
        ^^ [ | ] $$
    }
    token hashheadline {
         
    }
    token hashprefix {
        [\#] 
    }
    token underlineheadline {
         [\n] 
    }
    token underline {
        [\-]**2..*
    }
    token headlinecontent {
        [\N]+
    }
    token textline {
        ^^ (<[\N]-[\#]> (<[\N]-[\ ]> [\N]*)? )? [\n] 
    }
}

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;
}

But I have a problem with this grammar: As stated in the comments of the test-array there is something wrong with the grammar but I don't know what.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-27 22:31:06

更改

令牌到:

代码语言:javascript
复制
token textline { \n* > \N+ \n? }

我并没有考虑这种改变是否是您真正想要的,但这意味着您的测试可以按照您指定的方式工作。

通常,使用CommaIDE开发语法。大多数问题的位置,就像你发布的问题一样,立马就会变得显而易见。(解决方案当然是一个不同的步骤,但找出问题通常是大部分工作。)

通常,通过生成一个最小的示例来调试不明显的问题(请参阅我对您的问题的评论中提供的链接,但跳过可重现的部分)。

这样做通常是相对快速地找出任何不明显的问题所在的最有效的方法。

这也是一个有趣的游戏,通过将你的直觉和松散结合起来,你会变得更快。

二进制斩波

like方法。

通常,在SO上提问时,首先生成一个最小示例(如上所述),然后将其设置为最小示例

可重现的

示例(在最小示例的基础上构建)。(您问题中的示例是100%可重现的--谢谢!--但我正在为其他读者和您写这个答案。)

一个最小的可重现的例子是对你自己的洞察力和效率的问题,以及对其他人的洞察力和效率的问题。当我知道问题出在哪里时,我花了大约1分钟来解决你的问题。但在这里提问之前,我花了15分钟做了你会做的“最好”的事情:

对你来说是最好的,因为它很有趣(并且会稳步提高你的bug搜索效率)。

对我来说是最好的,因为我享受到了理所当然属于你的乐趣。

最适合其他人尝试回答你的问题,这样我们就不会重复不必要的工作。

最适合后来的读者,他们得到的问题很简单,解决了真正的困惑,而不是不幸的复杂问题,这些问题太模糊了真正的问题,以至于对读者来说失去了价值。

这对Rakoons来说是最好的,因为发布最少的可重复示例是版主和StackOverflow的老读者认为一个好问题的基本要素,这意味着他们更有可能认真对待Raku,帮助我们缓和我们的问题,并成为Rakoons。

也就是说,我并不是要阻止你提问,远非如此。如果,在阅读并尝试应用最小可重现示例页面中的指南后,您发现自己正在苦苦挣扎,请继续提问,并在问题中解释您在生成最小和/或可重现示例时遇到的任何问题,因为这将有所帮助。

票数 5
EN

Stack Overflow用户

发布于 2021-03-02 04:58:46

raku模块

文本::Markdown

可能与某些用户相关。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66397686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档