- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尽管文档声明将 token /规则/正则表达式称为 <.foo>
而不是 <foo>
使它们无法捕获,似乎范围有所不同,但我不确定是否有意。
这是一个简化的测试。在模块文件中:
unit module Foo;
my token y { y }
my token a is export { x <y> }
my token b is export { x <.y> }
grammar A {
use Foo;
token TOP { <a> }
}
grammar B {
use Foo;
token TOP { <b> }
}
A.parse("xy")
一切都按预期运行。但是,调用
B.parse("xy")
导致错误
No such method 'y' for invocant of type 'B'
.这是预期的行为还是潜在的错误?
最佳答案
S05 的意图
意向照the relevant speculation/design doc包括:
<foo ...>
This form always gives preference to a lexically scoped regex declaration, dispatching directly to it as if it were a function. If there is no such lexical regex (or lexical method) in scope, the call is dispatched to the current grammar, assuming there is one.
...
A leading
.
explicitly calls a method as a subrule; the fact that the initial character is not alphanumeric also causes the named assertion to not capture what it matches....
A call to
<foo>
will fail if there is neither any lexically scoped routine of that name it can call, nor any method of that name that be reached via method dispatch. (The decision of which dispatcher to use is made at compile time, not at run time; the method call is not a fallback mechanism.)
<bar>
如上所述。它优先解析为名为 my
的早期绑定(bind)词法 ( our
/&bar
) 例程/规则.否则,它会解析为调用名为 has
的 has (bar
) 方法/规则的后期绑定(bind)尝试。 .如果成功,它将匹配存储在名为 bar
的捕获下。 .<.bar>
调用名为 has
的具有 (bar
) 方法/规则如果它找到一个。它不捕获。<bar=.bar>
调用名为 has
的具有 (bar
) 方法/规则如果它找到一个。如果成功,它将匹配存储在名为 bar
的捕获下。 .换句话说,它与 <bar>
相同。除了它只尝试调用一个名为 .bar
的 has 方法;它不会首先尝试解析为词汇 &bar
.<&bar>
和 <.&bar>
意思相同。他们调用一个名为 &bar
的词法例程。并且不捕获。要执行相同的操作,但要捕获,请使用 <bar=&bar>
或 <bar=.&bar>
.grammar c {
has rule TOP { <bar> }
has rule bar { . { say 'has rule' } }
}
say c.parse: 'a';
显示:
has rule
「a」
bar => 「a」
(
has
声明符是可选的,将它们排除在外是惯用的。)
grammar c {
my rule bar { . { say 'inner my rule' } }
has rule TOP { <bar> }
has rule bar { . { say 'has rule' } }
}
say c.parse: 'a';
显示:
inner my rule
「a」
bar => 「a」
即使是在语法 block 之外声明的词法规则也优先于 has 规则:
my rule bar { . { say 'outer my rule' } }
grammar c {
has rule TOP { <bar> }
has rule bar { . { say 'has rule' } }
}
say c.parse: 'a';
显示:
outer my rule
「a」
bar => 「a」
关于regex - Perl 6/Raku 中捕获和非捕获正则表达式范围的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58158010/
虽然总是可以使用 mixin 或方法覆盖来修改 Bool 强制转换,但默认情况下哪些值被认为是真值,哪些值被认为是假值? 注意:这个问题是 asked previously ,但不幸的是它太旧了,它的
也许我遗漏了一些东西,但我想知道这段代码是否有充分的理由 编译 role L { method do-l (Int, Int --> Int ) { ... } } class A does L
FAQ:在 Raku 中如何检查列表是否为空? 是否有比以下更惯用的方法: my @l = (); say @l.elems == 0; say @l == (); say @l.Bool; doc
FAQ:在 Raku 中,如何从列表中删除重复项以仅获取唯一值? my $arr = [1, 2, 3, 2, 3, 1, 1, 0]; # desired output [1, 2, 3, 0] 最
我使用 Raku 进行一些计算,因为它有很好的数字类型。但是,我在使用“.raku”时遇到问题 say (1/6+1/6).raku # 我们得到这个。然而, say (1/10+1/10).raku
常见问题解答:在 Raku 中,如何将字符串转换为十六进制的字节列表(即十六进制解码器) 目前,我有: say "I ❤ 🦋".encode.list.map(*.base(16)); # (49
在 1990 年代和 2000 年代,编程语言爱好者几乎没有讨论过分隔延续的话题。它最近重新成为编程语言讨论中的一个主要问题。 我希望有人至少可以权威地说出 Rakudo 背后的延续(与 Raku 相
我选择在 Perl 6 中重新设计我之前代码的一部分,在这种情况下是一个棋盘。前两个类运行良好(或者至少工作正常,我知道的很少,我无法确定它们的正确性) ,但我坚持第三。这是代码: #!/home/h
如何重现数组的每个元素 x 次? 例如 for my @a=;和 x=5 ,结果应该是这样的 (blu blu blu blu blu red red red red red) 我想出了这个 say
我正在尝试使用一个变量并在一个步骤中为其分配一个表达式: 给定的(示例)代码 my @l=; my $i=0; while $i ; my $i=0; say @l[$i =~ ($i+1) * 2]
我想连续打印偶数,但我不能。 use Terminal::ANSIColor; # Wanna print even numbers in red for { $_ %2 == 0 ?? say c
目前(截至 2020 年 8 月)Rakudo 不在编译时对函数的返回值进行类型检查;也就是说,它不提供函数满足其返回约束的静态保证。具体来说,以下两个函数都编译为 Raku: sub get-int
自从我上次更新我在 Raku 生态系统中的一个模块以来已经有一段时间了。我需要更新中央注册表文件/存储库还是会自动检测到更新? 最佳答案 修改版本号后,我等了一个小时左右,然后 zef可以安装模块 -
有人能告诉我如何在正在执行的 Raku 脚本中找到脚本的路径吗? 我正在 Raku 中寻找与此 Perl 代码等效的代码: $path=abs_path($0); 最佳答案 使用 $*PROGRAM见
Raku的正则表达式有两种交替形式:|和||。有什么区别 ? say 'foobar' ~~ / foo || foobar / # 「foo」 say 'foobar' ~~ / foo | fo
我故意避免使用术语 defined因为一个变量很可能有一个定义的值,但 .defined方法将返回 false(例如,失败)。 有什么方法可以确定变量是否已为其设置了值? my $foo; say $
我从/path/to/data 运行/home/foo/bar.p6 并显示“Segmentation fault (core dumped)” 我在/var/crash 或我的主目录或当前工作目录中
在 cli 上,在 linux 中,cp -p保留文件上修改/访问的时间戳。是否可以直接在 Raku 中执行相同操作? Rosetta 示例使用 Nativecall,它可以通过系统调用来完成,但看起
我想重用 token parameter来自 Perl6::Grammar在我的自定义俚语中添加“自定义参数”参数不带 cargo 培养 . 我的意思是说: my $main-grammar = $*
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 去年关闭。 Improve this questio
我是一名优秀的程序员,十分优秀!