gpt4 book ai didi

whitespace - 什么时候空格在 Perl6 语法中真正重要?

转载 作者:行者123 更新时间:2023-12-04 13:15:38 26 4
gpt4 key购买 nike

有人可以澄清一下空格在 Perl 6 语法中的规则中什么时候很重要吗?我通过反复试验学习了一些,但似乎无法在文档中找到实际规则。

示例 1:

rule number {
<pm> \d '.'? \d*[ <pm> \d* ]?
}

rule pm {
[ '+' || '-' ]?
}

将匹配一个数字 2.68156e+154 ,而不关心 rule number 中存在的空格.但是,如果我在 \d* 之后添加一个空格,它会失败。
(即 <pm> \d '.'? \d* [ <pm> \d* ]? 失败)。

示例 2:
如果我想在一个单词的中间找到文字,那么它们周围的间距很重要。即,在查找条目 Double_t Delta_phi_R_1_9_pTproj_13_dat_cent_fx3001[52] = {
grammar TOP {
^ .*? <word-to-find> .* ?
}
rule word-to-find {
\w*?fx\w*
}

会找到这个词。但是,如果定义规则 word-to-find改为:
fx\w* fx\w*\w*fx \w*那么它就不会匹配。

另外,然后定义 '[52]'将匹配,而定义 'fx[52]'将不会。

感谢您的任何见解。指向文档中正确位置的指针将有很大帮助!
谢谢,

最佳答案

rule , 空格变成 <.ws> (即对 ws token 的非捕获调用),除了:

  • 在规则的开始,在第一个原子
  • 之前
  • [ 的开头(群) 或 ( (位置捕捉)
  • 之后 || , | , 和 &
  • 变量声明后 ( :my $x = 'foo'; )
  • 代码块后
  • % 之后用于引入分隔符的运算符
  • ~ 之后目标匹配运算符
  • 在内部修饰符之后(例如 :i )
  • $<var> = x 这样的结构内部

  • 或者,可能更容易记住,它将插入在任何可以匹配某些字符的构造之后以及任何零宽度断言之后。

    这些规则中的一个重要设计目标是永远不要插入 <.ws>阻碍最长 token 匹配的地方。例如,考虑 rule foo:sym<ba> { [ bar | baz ] } ,相当于 token foo:sym<ba> { [ bar <.ws> | baz <.ws> ] <.ws> } .默认 ws实现是非声明性的(由于它使用了 <!ww> ),这意味着它会破坏最长的 token 匹配,无论是在 protoregex 级别(如果它插入在规则的开头),还是在交替级别(如果它插入在开头)组或之后 | .

    请注意,这些规则仅适用于 rule ,而不是 tokenregex .可以使用 :s 随时打开它们。并使用 :!s 关闭然而,在其中任何一个中( rule 真的只是意味着“假装有一个 :s 在开始”)。

    最后, ws规则(默认为 token ws { <!ww> \s* } )可以在语法中被覆盖,以定义空格在被解析的语言中的含义。

    关于whitespace - 什么时候空格在 Perl6 语法中真正重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48892306/

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