在 Rascal 中匹配不间断 space
Match non breaking space in Rascal
在 Rascal 中,如何匹配语法定义中的非中断 space?我在我试图分析的代码中发现了其中一些,并希望将其识别为布局。
然而,仅仅将字符粘贴到 Rascal 文件中是行不通的(有或没有通过反斜杠作为前缀进行转义),“\uc2a0”“\uC2A0”也行不通,而 "c2a0" 确实是字符在我正在阅读的文件中的编码方式(根据 Sublime Text 3 的 Hex Viewer 插件)。
这是您在文件中查看的UTF8编码;这不是 unicode 代码点。如果我们用 24 位 unicode table 解释这个字符的 UTF8 编码,你会得到一个 "슠"
:
rascal>"\uc2a0"
str: "슠"
unicode Rascal转义方式中的不间断space是:\u00A0
.
我通过启动控制台发现 copy/pasting 字符从 sublime 到引号之间的控制台:
rascal>" "
str: "\u00a0"
匹配可以像这样使用正则表达式来完成:
rascal>/\u00a0/ := " "
bool: true
但你也可以直接使用白色space字符:
rascal>/ / := " "
bool: true
或使用语法定义:
rascal>lexical WS = [\u00a0];
ok
rascal>parse(#WS, " ")
WS: (WS) ` `
在 Rascal 中,如何匹配语法定义中的非中断 space?我在我试图分析的代码中发现了其中一些,并希望将其识别为布局。
然而,仅仅将字符粘贴到 Rascal 文件中是行不通的(有或没有通过反斜杠作为前缀进行转义),“\uc2a0”“\uC2A0”也行不通,而 "c2a0" 确实是字符在我正在阅读的文件中的编码方式(根据 Sublime Text 3 的 Hex Viewer 插件)。
这是您在文件中查看的UTF8编码;这不是 unicode 代码点。如果我们用 24 位 unicode table 解释这个字符的 UTF8 编码,你会得到一个 "슠"
:
rascal>"\uc2a0"
str: "슠"
unicode Rascal转义方式中的不间断space是:\u00A0
.
我通过启动控制台发现 copy/pasting 字符从 sublime 到引号之间的控制台:
rascal>" "
str: "\u00a0"
匹配可以像这样使用正则表达式来完成:
rascal>/\u00a0/ := " "
bool: true
但你也可以直接使用白色space字符:
rascal>/ / := " "
bool: true
或使用语法定义:
rascal>lexical WS = [\u00a0];
ok
rascal>parse(#WS, " ")
WS: (WS) ` `