gpt4 book ai didi

raku - 为什么这个 perl 6 语法不起作用?

转载 作者:行者123 更新时间:2023-12-04 17:44:22 25 4
gpt4 key购买 nike

我不知道 perl 5,但我想我会玩 perl 6。我正在尝试它的语法功能,但到目前为止我没有运气。这是我的代码:

    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> 不匹配。规则。有任何想法吗?

最佳答案

您忘记了 character classes 中的尖括号句法:
[a..z]+应该是 <[a..z]>+[0..9]+应该是 <[0..9]>+
本身,方括号[ ]只需充当 non-capturing group在 Perl 6 正则表达式中。所以[a..z]+将匹配字母“a”,后跟任意两个字符,然后是字母“z”,然后再匹配整个事物任意次数。由于这与“大纲”一词不匹配,<aword> token 未能为您匹配,并且解析没有继续到 <num> token 。

PS:调试语法时,添加{say ...}更方便的替代方法到处都是 block ,就是用Grammar::Debugger .安装该模块后,您可以临时添加行 use Grammar::Debugger;到您的代码,并运行您的程序 - 然后它会一步一步地检查您的语法(使用 ENTER 键继续),并告诉您哪些 token /规则在此过程中匹配。

关于raku - 为什么这个 perl 6 语法不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41127906/

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