Raku:Markdown语法以解析部分

字节单位

我想创建一个可用于解析简化的降价语法的raku语法。降低的降价语法必须满足以下条件:

  • 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 textline { \n* <!before <headline>> \N+ \n? }

我没有考虑过该更改是否是您真正想要的,但这意味着您的测试将按您指定的方式工作。


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


通常,通过生成最小示例来调试非显而易见的问题(请参阅我对问题的评论中提供的链接,但跳过可重复的部分)。

这样做通常是最快速地找出任何非显而易见的问题所在的最有效方法。

这也是一个有趣的游戏,通过将您的直觉与宽松的二进制印章之类的方法相结合,您将可以更快地进行游戏


通常,在对SO提出问题时,请首先生成一个“最小示例”(如上所述),然后使其成为“最小可复制示例”(以“最小示例”为基础)。(您问题中的示例是100%可复制的-谢谢!-但我正在为其他读者和您编写此答案。)

最小的可复制示例是您自己的洞察力和效率问题,而这对于其他人来说都是礼貌和礼貌。一旦了解了问题所在,解决您的问题就花了我大约1分钟的时间。但是我花了15分钟来做您将要做的“最好”的事情,然后再在这里提出一个问题:

  • 最适合您,因为它很有趣(并且将稳定地提高您的错误查找生产力)。

  • 最适合我,享有应有的乐趣应该是您的。

  • 最适合试图回答您问题的其他所有人,因此我们不会重复不必要的工作。

  • 最适合以后的读者,他们获得的简单问题可以解决真正的困惑,而不幸的是复杂的问题使真正的问题难以理解,从而失去了对读者的价值。

  • 最适合于Rakoons,因为张贴“最少可复制的示例”是主持人和StackOverflow的常规读者认为这是一个好问题的基本要素,这意味着他们更有可能认真对待Raku,帮助我们缓解问题并成为Rakoons。

就是说,我并不是要劝阻您问问题,要远离它。如果在阅读并尝试应用“最小可复制示例”页面中的指南后,发现自己仍在挣扎中,请继续提出问题,并在问题中解释您在制作最小和/或可复制示例时遇到的任何问题,因为那会有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Raku:Markdown语法以解析部分

来自分类Dev

尝试为markdown定义语法时出现raku语法问题

来自分类Dev

尝试为markdown定义语法时出现raku语法问题

来自分类Dev

如何将带有替代语法的markdown解析为带有节点的HTML?

来自分类Dev

Vim语法(Markdown)

来自分类Dev

如何将Markdown的一小部分解析为React组件?

来自分类Dev

NLTK:使用简单的语法和部分语音标记来解析句子

来自分类Dev

Kramdown的通用Markdown代码语法

来自分类Dev

R Markdown:引文解析

来自分类Dev

Scala语法部分

来自分类Dev

部分参数的语法

来自分类Dev

自上而下的解析与递归语法

来自分类Dev

解析:: RecDescent和语法

来自分类Dev

简单语法无法解析

来自分类Dev

解析简单查询语法

来自分类Dev

在EOS停止Raku语法(字符串结尾)

来自分类Dev

markdown中网址的粗体部分

来自分类Dev

markdown中网址的粗体部分

来自分类Dev

Markdown语法检查以实现持续集成?

来自分类Dev

使用github markdown语法引用论文

来自分类Dev

vim markdown语法高亮显示非常多

来自分类Dev

pyparsing的Markdown语法,获取正确的空格

来自分类Dev

使用markdown语法跟随vim中的链接

来自分类Dev

jekyll高亮标记破坏markdown语法

来自分类Dev

Markdown语法着色少(分页器)

来自分类Dev

ANTLR4的HTML / Markdown样式语法

来自分类Dev

Xaringan中的Mathjax和Markdown语法冲突

来自分类Dev

默认参数解析部分

来自分类Dev

解析文件的各个部分