gpt4 book ai didi

raku - 语法和 Unicode 字符

转载 作者:行者123 更新时间:2023-12-04 10:59:49 25 4
gpt4 key购买 nike

为什么在下面 Grammar无法解析 unicode 字符?

<sym> 中删除单词边界后,它解析得很好.

#!/usr/bin/env perl6

grammar G {


proto rule TOP { * }

rule TOP:sym<y> { «<.sym>» }
rule TOP:sym<✓> { «<.sym>» }

}

say G.parse('y'); # 「y」
say G.parse('✓'); # Nil

最佳答案

来自 the « and » "left and right word boundary" doc :

[«] matches positions where there is a non-word character at the left, or the start of the string, and a word character to the right.


不是单词字符。所以词边界断言失败。

什么是和不是“文字字符”

“词”,在 \w 的意义上字符类,在 P6 中的定义与在 P5 中的定义相同(当不使用 P5 \a 正则表达式修饰符时),即字母、一些十进制数字或下划线:
  • Unicode general category的字符以 L 开头,代表 来信 .1
  • Unicode 通用类别为 Nd 的字符,代表 数字,十进制 .2
  • _ ,下划线。

  • “阿尔法'Nd下”

    在下面的评论中@p6steve++ 贡献了一个可爱的助记符,将“under”添加到通常的“alphanum”。

    但是“num”有点错误,因为它不是任何数字,而是一些十进制数字,特别是与 Unicode 通用类别 Nd 匹配的字符(由 P6 正则表达式匹配 /<:Nd>/ )。2

    这自然导致 alphaNdunder(alpha Nd under)发音为“alpha 'nd under”。

    脚注

    1 个字母由 P6 正则表达式匹配 /<:L>/ .这包括 Ll (字母,小写)(由 /<:Ll>/ 匹配)作为 JJ 注释,但也包括 Lu (字母,大写)和 Lo (信件,其他),后者包括 人物JJ也提到了。还有其他字母子类别。

    2 位 Unicode 通用类别的十进制数字 Nd由 P6 正则表达式匹配 /<:Nd>/ .这涵盖了可以链接在一起以生成任意大的十进制数的十进制数字,其中每个数字位置加上 10 的幂。它不包括具有“排版上下文”的十进制数字(我的措辞遵循 Wikipedia 的示例)。例如, 1是表示一的英文十进制数字;它包括在内。但是 ¹被排除在外,因为它们具有“排版上下文”。对于超过 10 亿人,他们的母语使用 表示一个和 包含在 Nd 中十进制数字的类别。但对于另外 10 亿多人,他们的母语使用 对于一个,但它被排除在 Nd 之外类别(并且在 L 类别中代替字母)。同样 (梵文 6) 包含在 Nd 中类别但 (汉数6)被排除在外。

    关于raku - 语法和 Unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57518688/

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