1
在Rascal中,如何匹配語法定義中的非破壞空間?我發現其中的一些代碼是我正在嘗試分析的代碼,並且希望將其識別爲佈局。在Rascal中匹配非破壞空間
但是,將字符粘貼到Rascal文件不起作用(有或沒有用反斜線加前綴),也不是「\ uc2a0」「\ uC2A0」,而「c2a0」確實是字符在我正在閱讀的文件中編碼(根據Sublime Text 3的Hex Viewer插件,即是)。
在Rascal中,如何匹配語法定義中的非破壞空間?我發現其中的一些代碼是我正在嘗試分析的代碼,並且希望將其識別爲佈局。在Rascal中匹配非破壞空間
但是,將字符粘貼到Rascal文件不起作用(有或沒有用反斜線加前綴),也不是「\ uc2a0」「\ uC2A0」,而「c2a0」確實是字符在我正在閱讀的文件中編碼(根據Sublime Text 3的Hex Viewer插件,即是)。
這是您在文件中查看的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) ` `
非常感謝。我從來沒有意識到unicode代碼點和編碼之間有區別,因爲最常用的字符的值是相同的。很高興知道這並非總是如此。 –
對我而言,這也是一種啓示 – jurgenv