1

Wie kann ich in Rascal ein nicht brechendes Leerzeichen in einer Syntaxdefinition abgleichen? Ich habe einige von ihnen in Code gefunden, den ich analysieren möchte und möchte ihn als Layout erkennen.Entspricht nicht brechendem Leerzeichen in Rascal

Das Einfügen des Zeichens in die Rascal-Datei funktioniert jedoch nicht (mit oder ohne Entweichen durch Voranstellen eines umgekehrten Schrägstrichs), auch nicht "\ uc2a0" "\ uC2A0", während "c2a0" wirklich das Zeichen ist ist in der Datei codiert, die ich gerade lese (entsprechend dem Hex Viewer-Plugin für Sublime Text 3).

Antwort

1

Es ist die UTF8-Codierung, die Sie in der Datei betrachten; Das sind keine Unicode-Codepunkte. Wenn wir die UTF8-Codierung dieser Zeichen in der 24-Bit-Unicode-Tabelle zu interpretieren, erhalten Sie einen "슠":

rascal>"\uc2a0" 
str: "슠" 

Der non-breaking Raum in Unicode Rascal Flucht Stil ist: \u00A0.

ich durch Starten einer Konsole und Kopie herausgefunden/Einfügen der Charakter von erhabener in die Konsole zwischen Anführungszeichen:

rascal>" " 
str: "\u00a0" 

es Passende wie so mit einem regulären Ausdruck durchgeführt werden kann:

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

Aber man kann buchstäblich auch das Leerzeichen verwenden:

rascal>/ / := " " 
bool: true 

Oder usin g eine Syntaxdefinition:

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

Vielen Dank. Ich habe nie bemerkt, dass es einen Unterschied zwischen Unicode-Codepunkten und Codierungen gibt, weil die Werte für die am häufigsten verwendeten Zeichen identisch sind. Sehr gut zu wissen, dass das nicht immer stimmt. –

+0

Ja, für mich war das auch eine Offenbarung – jurgenv

Verwandte Themen