gpt4 book ai didi

grammar - 从语法中导出正则表达式

转载 作者:行者123 更新时间:2023-12-04 07:48:44 30 4
gpt4 key购买 nike

Grammars是类,因此,它们应该遵守与其他类相同的规则。但是,从语法中导出正则表达式似乎存在问题:

grammar Word {
token TOP { ^ <letters> $}
regex letters is export { <[\w] - [_]>+ };
sub exported () is export { return 'exported' };
}

import Word;

say exported;
say "what_ever" ~~ &letters;
import有效进口 exported并且它不会提示 letters .但是,在最后一行中有此错误:

Type check failed in binding to parameter '<anon>'; expected Word but got Match (Match.new(orig => "what_ev...)

如果 &letters 也会发生同样的错误改为 /<letters>/ ,这是调用正则表达式的另一种方式。错误似乎指向 letters当它们在语法中声明时有一些隐藏的参数,因为这有效:

module Regexes {
my regex letters is export { <[\w] - [_]>+ };
}
import Regexes;
say "what_ever" ~~ /<letters>/;
# Output:
# 「what」
# letters => 「what」

那么这个参数实际上是什么?我们如何有效地使用从 Grammar 导出的正则表达式/ token /规则

最佳答案

前缀 letters带有 my 的正则表达式声明或 our .

默认情况下是 method , regex , token , 或 rule声明符是用隐式 has 声明的它前面的声明符。

我仍在思考这里发生了什么,但想根据您的第一条评论更新我的答案。

Type check failed in binding to parameter '';
expected Word but got Match (Match.new(orig => "what_ev...)

parameter ''位绝对比真棒。

奇怪的是用 my method 声明的例程的签名或 our method将封闭的类或文法作为它们的类型,假设为 Mu如果它们是在主线中声明的,而对于 regex , token , 或 rule ,调用者始终是 Mu :
grammar g {
method method { ... } # (g $: *%_)
has method has-method { ... } # (g $: *%_)
my method my-method is export { ... } # (g $: *%_)

regex regex { ... } # (g $: *%_)
has regex has-regex { ... } # (g $: *%_)
my regex my-regex is export { ... } # (Mu $: *%_)

sub sub is export { ... } # ()
# has sub has-sub is export { ... } # Cannot use 'has' with sub declaration
my sub my-sub is export { ... } # ()
}

import g;

say .signature
for g.^lookup('method'),
g.^lookup('has-method'),
&my-method,
g.^lookup('regex'),
g.^lookup('has-regex'),
&my-regex,
&sub,
&my-sub

显示语法中每个例程声明的签名。我在每个例程的末尾添加了输出作为注释。

关于grammar - 从语法中导出正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52696276/

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