匹配Rascal中的非破坏空间

时间:2016-06-30 21:21:50

标签: character-encoding escaping rascal non-printing-characters

在Rascal中,如何在语法定义中匹配非中断空格?我在代码中找到了一些我想要分析的内容,并希望将其识别为布局。

然而,只是将字符粘贴到Rascal文件中是不起作用的(有或没有通过前缀反斜杠转义),也不是“\ uc2a0”“\ uC2A0”,而“c2a0”确实是字符的方式在我正在阅读的文件中编码(根据Sublime Text 3的Hex Viewer插件,即)。

1 个答案:

答案 0 :(得分:1)

这是您在文件中查看的UTF8编码;这不是unicode代码点。如果我们在24位unicode表中解释此字符的UTF8编码,则会得到"슠"

rascal>"\uc2a0"
str: "슠"

unicode Rascal转义样式中的不间断空格是:\u00A0

我通过启动控制台并将字符从sublime复制/粘贴到引号之间的控制台中找到:

rascal>" "
str: "\u00a0"

匹配它可以使用正则表达式完成:

rascal>/\u00a0/ := " "
bool: true

但你也可以使用空格字符:

rascal>/ / := " "
bool: true

或者使用语法定义:

rascal>lexical WS = [\u00a0];
ok
rascal>parse(#WS, " ")
WS: (WS) ` `