Das \u000d
Escape beendet einen Kommentar, da \u
Escapezeichen vor dem Tokenisieren des Programms einheitlich in die entsprechenden Unicode-Zeichen konvertiert werden . Sie können auch \u0057\u0057
anstelle von verwenden //
, um einen Kommentar zu beginnen .
Dies ist ein Fehler in Ihrer IDE, der die Zeile syntaktisch hervorheben sollte, um zu verdeutlichen, dass \u000d
der Kommentar endet.
Dies ist auch ein Designfehler in der Sprache. Es kann jetzt nicht korrigiert werden, da dies Programme beschädigen würde, die davon abhängen. \u
Escapezeichen sollten vom Compiler entweder nur in Kontexten in das entsprechende Unicode-Zeichen konvertiert werden, in denen dies "sinnvoll" ist (Zeichenfolgenliterale und -bezeichner und wahrscheinlich nirgendwo anders), oder es sollte ihnen verboten sein, Zeichen im Bereich U + 0000–007F zu generieren , oder beides. Entweder diese Semantik hätte den Kommentar verhindert durch die beendet wird , \u000d
Flucht, ohne sie mit den Fällen zu stören , wo \u
entkommt nützlich Note sind , dass das beinhaltet die Verwendung von \u
Fluchten im Inneren Kommentar als eine Möglichkeit , zu kodieren Kommentaren in einer nicht-lateinischen Schrift, weil die Der Texteditor könnte einen breiteren Blick darauf werfen, wo\u
Escapezeichen sind bedeutender als der Compiler. (Mir ist jedoch kein Editor oder keine IDE bekannt, die \u
Escapezeichen in einem beliebigen Kontext als entsprechende Zeichen anzeigen .)
Es gibt einen ähnlichen Entwurfsfehler in der C-Familie 1, bei dem Backslash-Newline verarbeitet wird, bevor Kommentargrenzen bestimmt werden, z
// this is a comment \
this is still in the comment!
Ich erwähne dies, um zu veranschaulichen, dass es einfach ist, diesen bestimmten Entwurfsfehler zu machen, und erst dann zu erkennen, dass es sich um einen Fehler handelt, wenn es zu spät ist, ihn zu korrigieren, wenn Sie es gewohnt sind, über Tokenisierung nachzudenken und die Denkweise von Compiler-Programmierern zu analysieren über Tokenisierung und Analyse. Wenn Sie Ihre formale Grammatik bereits definiert haben und dann jemand einen syntaktischen Sonderfall entwickelt - Trigraphen, Backslash-Newline, Codierung beliebiger Unicode-Zeichen in Quelldateien, die auf ASCII beschränkt sind, was auch immer -, die eingeklemmt werden müssen, ist dies einfacher Fügen Sie vor dem Tokenizer einen Transformationsdurchlauf hinzu, um den Tokenizer neu zu definieren und darauf zu achten, wo es sinnvoll ist, diesen Sonderfall zu verwenden.
1 Für Pedanten: Mir ist bewusst, dass dieser Aspekt von C zu 100% beabsichtigt war, mit der Begründung - ich denke mir das nicht aus -, dass Sie damit Code mit beliebig langen Zeilen mechanisch auf Lochkarten anpassen können. Es war immer noch eine falsche Designentscheidung.