1

В Rascal, как я могу сопоставить нераскрывающееся пространство в определении синтаксиса? Я нашел некоторые из них в коде, который я пытаюсь проанализировать, и хотел бы признать его как макет.Соответствие нераспаковывающемуся пространству в Rascal

Однако, просто вставка символа в файл Rascal не работает (с или без экранирования с помощью префикса с обратной косой чертой), а также «\ uc2a0» «\ uC2A0», в то время как «c2a0» на самом деле является способом символа закодирован в файле, который я читаю (в соответствии с плагином Hex Viewer для Sublime Text 3, то есть).

ответ

1

Это кодировка UTF8, которую вы просматриваете в файле; который не является кодировкой unicode. Если интерпретировать UTF8 кодировки этого символа в 24-битный юникод таблице, вы получите "슠":

rascal>"\uc2a0" 
str: "슠" 

неразрывное пространство в юникоде Rascal стиле побега: \u00A0.

я узнал, начиная с консоли и копировать/вставить символ из возвышенного в консоли между кавычками:

rascal>" " 
str: "\u00a0" 

Matching это может быть сделано таким образом, используя регулярное выражение:

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

Но вы также можете в буквальном смысле использовать символ пробела:

rascal>/ / := " " 
bool: true 

Или USIN g определение синтаксиса:

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

Большое спасибо. Я никогда не понимал, что между кодировками и кодировками Unicode существует разница, потому что значения одинаковы для наиболее часто используемых символов. Очень хорошо знать, что это не всегда так. –

+0

Да, для меня это было также откровением – jurgenv