1

在Rascal中,如何匹配語法定義中的非破壞空間?我發現其中的一些代碼是我正在嘗試分析的代碼,並且希望將其識別爲佈局。在Rascal中匹配非破壞空間

但是,將字符粘貼到Rascal文件不起作用(有或沒有用反斜線加前綴),也不是「\ uc2a0」「\ uC2A0」,而「c2a0」確實是字符在我正在閱讀的文件中編碼(根據Sublime Text 3的Hex Viewer插件,即是)。

回答

1

這是您在文件中查看的UTF8編碼;這不是unicode碼點。如果我們解釋這個字符在24位Unicode表的UTF8編碼,你會得到一個"슠"

rascal>"\uc2a0" 
str: "슠" 

以Unicode流氓逃避風格的非換空間:\u00A0

我發現通過啓動一個控制檯和複製/粘貼從崇高的字符爲引號之間的控制檯:

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

rascal>" " 
str: "\u00a0" 

匹配它可以像這樣使用正則表達式來完成

但你也可以字面上使用空白字符:

rascal>/ / := " " 
bool: true 

or usin g語法定義:

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

非常感謝。我從來沒有意識到unicode代碼點和編碼之間有區別,因爲最常用的字符的值是相同的。很高興知道這並非總是如此。 –

+0

對我而言,這也是一種啓示 – jurgenv