为什么此perl 6语法不起作用?

淡淡的

我不了解perl 5,但我想我会喜欢perl6。我正在尝试它的语法功能,但到目前为止我还没有运气。这是我的代码:

    grammar CopybookGrammar {
        token TOP { {say "at TOP" }  <aword><num>}
        token aword { {say "at word" } [a..z]+ }
        token num { {say "at NUM" } [0..9]+ }
}


sub scanit($contents) {
        my $match1 = CopybookGrammar.parse($contents);
        say $match1;
}

scanit "outline1";

输出如下:

at TOP
at word
(Any)

由于某些原因,它似乎与<num>规则不匹配有任何想法吗?

短信

您忘记了字符类语法中的尖括号

[a..z]+ 应该 <[a..z]>+

[0..9]+ 应该 <[0..9]>+

就其本身而言,方括号在Perl 6正则表达式中[ ]仅充当非捕获组因此,[a..z]+将匹配字母“ a”,后跟任意两个字符,后跟字母“ z”,然后将整件事匹配任意次数。由于这与单词“大纲”不匹配,因此<aword>令牌无法与您匹配,并且解析没有继续进行<num>


PS:调试语法时,{say ...}使用Grammar :: Debugger可以更方便地替代在各处添加块的方法安装该模块后,您可以将该行临时添加use Grammar::Debugger;到代码中,然后运行您的程序-然后它将逐步进行语法检查(使用ENTER键继续),并告诉您哪些标记/规则与方式。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章