grammar - 从语法中导出正则表达式
问题描述
语法是类,因此,它们应该遵守与其他类相同的规则。但是,从语法中导出正则表达式似乎存在问题:
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
解决方案
使用或为letters
正则表达式声明添加前缀。my
our
默认情况下,a method
、regex
、token
或声明符在其前面rule
带有隐式声明符。has
我仍在思考这里发生了什么,但想更新我的答案以回应您的第一条评论。
Type check failed in binding to parameter ''; expected Word but got Match (Match.new(orig => "what_ev...)
这parameter ''
一点绝对不是太棒了。
奇怪的是,使用 a或封闭类或语法作为其类型声明的例程的签名,假设它们是否在主线中声明,而对于、或,调用者始终是: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
显示语法中每个例程声明的签名。我在每个例程的末尾添加了输出作为注释。
推荐阅读
- ios - NotificationCenter - 显示和隐藏启动画面
- ios - CoreBluetooth 特征值被覆盖为零
- c# - Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 在构建时未找到错误
- javascript - JavaScript 两个自调用函数的区别?
- asp.net - ASP.NET - 并行发送批量邮件 - 最快和最有效的方式
- ubuntu - 重新启动geth导致数据丢失
- android - 使用onesignal ionic 3时尝试构建android时出错
- html - 我怎样才能简单地文章标签?我正在重用相同的 10 行代码,唯一的区别是标签颜色
- java - Android Things GPS ArrayIndexOutOfBoundsException
- laravel - 带有强制 HTTPS 的 Laravel .htaccess