[Allegro] Codierungsproblem mit "if ARtic set"
Thomas Berger
ThB at Gymel.com
Mo Nov 4 12:17:59 CET 2013
Lieber Herr Eversberg, liebe Liste,
>> Die PRESTO-Ersetzungsbefehle der Exportsprache versprachen,
>> \170 (oder \0170) zu beherrschen, daran koennte man anknuepfen
>> (fuehrende Null alledings problematisch, weil das anderswo
>> normalerweise so interpretiert wird, dass es sich um oktale
>> Notation handelt, nicht dezimale). "^" als Escape ist sehr
>> unueblich und birgt wiederum Verwechslung mit Regulaeren
>> Ausdruecken (weil dort alle moeglichen Zeichen Steuerbedeutung
>> haben, sind dort Escapes am bekanntesten)
>>
> Wie immer geben Sie hier allerhand Bedenken zum Besten, aber
> an einem konkreten Vorschlag lassen Sie's dann mangeln.
> Nur können wir ja nicht sagen, wir lassen das offen und
> ungelöst, denn es gibt keine 100% problemfreie Lösung.
Also, die Loesung sollte nicht nur fuer Ersetzungsbefehle im
engeren Sinn brauchbar sein, sondern in Richtung auf das
Fernziel, aus allen Steuer- und Parameterdateien mit normalen
Editoren nicht bearbeitbare Zeichen herauszuhalten, geeignet.
Ich habe zwar soeben(!!!) von
< https://en.wikipedia.org/wiki/Escape_character > gelernt,
dass cmd.exe a) ein Escape-Zeichen kennt und b) dazu "^" nutzt,
aber wirklich verbreitet scheint nur "\" zu sein, vgl. auch
< https://en.wikipedia.org/wiki/Backslash >.
[Inzwischen ist mir eingefallen, dass Steuerzeichen in cstrings
auch durch "^" notierbar oder anzeigbar sind, also etwa ^J fuer
das Zeichen 10. Das funktioniert natuerlich nur fuer ca. 27
Zeichen...]
Man kann nun hoechstens noch ueberlegen, ob das irgendwie
verschnoerkelt werden soll, Perl kennt z.B. \x20 aber auch
\x{20DA} (nur so kann die Ambivalenz bei \x20DA aufgeloest
werden).
Typischerweise kommt hinter "\" jedenfalls ein Zeichen, das
die Art des Arguments klaert (folgt eine Ziffer, ist es i.A.
eine Oktalzahl, das hat wohl seine Wurzeln in der Vor-Unix-
Zeit der PDP-11 und anderer Maschinen). Dezimale Escapes
scheinen sehr unueblich (nur PRESTO konnte es angeblich, und
das \u von RTF nutzt 16bit Integer *mit Vorzeichen*),
hexadezimal ist das verbreitetste, manchmal fuer Bytes,
manchmal fuer Unicode-Code-Points, manchmal fuer beides:
\'ff (RTF)
\xff (Perl, Python etc.)
\x{ff} (Perl)
\u0000ff (JSON)
Ein moegliches Problem mit "\" sehe ich allerdings darin, dass
das das Kommando-Trennzeichen in der Flex-Sprache ist und
die traditionell nicht strikt geparst wird, daher muessen
bislang alle "\" in Cstrings als "\\" escaped werden (oder nur
bei Eingabe im Schreibfeld?). Wenn nun "\" als Einleitungszeichen
eines Escape-Mechanismus fungieren soll, muss ein nacktes "\"
naturgemaess ebenfalls escaped werden, "\\" ist da ueblich.
Das kann m.E. so geregelt werden, dass Cstrings in Flexen weiterhin
mit "\\" geschrieben werden (und nicht mit "\\\\"), der Flex-
Interpreter muss dann allerdings sorgfaeltiger arbeiten und
*wissen* ob er gerade in oder ausserhalb eines cstrings oder
insert-Ersetzungskommandos ist.
viele Gruesse
Thomas Berger
Mehr Informationen über die Mailingliste Allegro