Frage

Wie funktioniert das C / C ++ Compiler die Escape-Zeichen manipulieren [ "\"] im Quellcode? Wie wird Compiler Grammatik für die Verarbeitung dieses Zeichen geschrieben? Was ist der Compiler tun, nachdem das Zeichen zu begegnen?

War es hilfreich?

Lösung

Die meisten Compiler werden in Teile aufgeteilt: der Compiler-Frontend einen Lexer genannt wird oder ein Scanner. Dieser Teil des Compiler liest die tatsächlichen Zeichen und schafft Token. Es hat eine Zustandsmaschine, die beim Anblick ein Escape-Zeichens entscheidet, ob es echt ist (zum Beispiel, wenn es in einem String erscheint) oder es modifiziert, um das nächste Zeichen. Das Token ausgegeben wird dementsprechend als Escape-Zeichen oder ein anderes Zeichen (wie ein Register oder eine neue Zeile), um zum nächsten Teil des Compilers ( der Parser ). Die Zustandsmaschine kann mehrere Zeichen in einem Token.

Andere Tipps

Eine interessante Anmerkung zu diesem Thema On Trusting Vertrauen [PDF-Link] .

Das Papier beschreibt eine Möglichkeit, ein Compiler dieses Problem genau umgehen konnte, zeigt, wie die c-geschrieben-in-C-Compiler keine explizite Übersetzung der Codes in ASCII-Wert haben; und wie ein neuen Escape-Code in die Compiler Bootstrap, so dass das Verständnis des ASCII-Wertes für den neuen Code ist auch implizit.

Es ist allgemein entkommt die folgenden Zeichen:

  • In einem Stringliteral oder Zeichenliteral, bedeutet es das nächste Zeichen zu entkommen. \a bedeutet ‚Alarm‘ (blinkt das Terminal, Piepen oder was auch immer), \n bedeutet ‚Zeilenvorschub‘, \xNUM bedeutet eine Hexadezimalzahl zum Beispiel.
  • Wenn es scheint, als das letzte sichtbare Zeichen vor einem Newline, ob innerhalb eines Strings oder nicht, es wirkt als ein Zeilenfortsetzungs (und sogar innerhalb einer Zeile weiter Kommentars!): Das folgende Newline-Zeichen wird ignoriert, und die nächste Zeile mit der aktuellen Zeile zusammengefasst.

Escape-Zeichen mit einem folgenden Zeichen (wie \n) ist ein einzelne Zeichen für C-Compiler - Scanner präsentiert es als Zeichen Token Parser, so gibt es keine Notwendigkeit, in speziellen Syntaxregeln in Parsern für Escape-Zeichen

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top