Kennung (Computersprachen) - Identifier (computer languages)

In Computersprachen , Identifikatoren sind Token (auch als Symbole , aber nicht mit dem verwechselt werden Symbol Urtyp ), die die Sprache Entitäten nennen. Zu den Arten von Entitäten, die ein Bezeichner bezeichnen könnte, gehören Variablen , Typen , Labels , Unterroutinen und Pakete .

Lexikalische Form

Welche Zeichenfolgen als Bezeichner gelten, hängt von der lexikalischen Grammatik der Sprache ab. Eine gängige Regel sind alphanumerische Sequenzen, wobei auch Unterstriche erlaubt sind (in einigen Sprachen ist _ nicht erlaubt) und mit der Bedingung, dass sie nicht mit einer numerischen Ziffer beginnen dürfen (um die Lexik zu vereinfachen, indem Verwechslungen mit Integer-Literalen vermieden werden ) – foo, foo1, foo_bar, _foosind also erlaubt , ist es aber 1foonicht – dies ist die Definition, die in früheren Versionen von C und C++ , Python und vielen anderen Sprachen verwendet wurde. Spätere Versionen dieser Sprachen unterstützen zusammen mit vielen anderen modernen Sprachen viele weitere Unicode- Zeichen in einem Bezeichner. Eine allgemeine Einschränkung besteht jedoch darin, Leerzeichen und Sprachoperatoren nicht zuzulassen; Dies vereinfacht tokenization indem sie es Freiform und kontextfrei . Zum Beispiel bedeutet das Verbot +von Bezeichnern aufgrund seiner Verwendung als binäre Operation, dass a+bund a + bkann dasselbe tokenisiert werden, während es, wenn es erlaubt a+bwäre, ein Bezeichner und kein Zusatz wäre. Leerzeichen in Bezeichnern sind besonders problematisch, da wenn Leerzeichen in Bezeichnern erlaubt sind, dann eine Klausel wie if rainy day then 1legal ist, mit rainy dayals Bezeichner, aber die Tokenisierung erfordert den phrasalen Kontext einer if-Klausel. Einige Sprachen erlauben jedoch Leerzeichen in Bezeichnern, wie ALGOL 68 und einige ALGOL-Varianten – zum Beispiel ist folgendes eine gültige Anweisung: real half pi;was eingegeben werden könnte als .real. half pi;(Schlüsselwörter sind fett gedruckt, konkret durch Streichen ). In ALGOL dies war möglich , weil Schlüsselwörter syntaktisch unterschieden werden, so dass es keine Gefahr einer Kollision oder Mehrdeutigkeit, Räume während der eliminiert werden Linie Wiederaufbau - Phase und die Quelle wurde über verarbeitete abtastlosen Parsing , könnte so Lexing kontextsensitiver sein.

In den meisten Sprachen haben einige Zeichenfolgen die lexikalische Form eines Bezeichners, werden aber als Schlüsselwörter bezeichnet – ist beispielsweise ifhäufig ein Schlüsselwort für eine if-Klausel, hat aber lexikalisch die gleiche Form wie igoder foonämlich eine Buchstabenfolge. Diese Überlappung kann auf verschiedene Weise gehandhabt werden: Es kann verboten sein, Bezeichner zu sein – was die Tokenisierung und das Parsen vereinfacht – in diesem Fall handelt es sich um reservierte Wörter ; sie können beide zugelassen sein, aber auf andere Weise unterschieden werden, beispielsweise durch Streichen; oder Schlüsselwortsequenzen als Identifikatoren erlaubt sein können und deren Sinn aus dem Kontext bestimmt wird, was einen kontextsensitiven Lexer erfordert. Nicht-Schlüsselwörter können auch reservierte Wörter sein (als Bezeichner verboten), insbesondere aus Gründen der Aufwärtskompatibilität , falls ein Wort in Zukunft zu einem Schlüsselwort werden könnte. In einigen Sprachen, zB PL/1 , ist die Unterscheidung nicht klar.

Semantik

Der Geltungsbereich oder die Zugänglichkeit eines Bezeichners innerhalb eines Programms kann entweder lokal oder global sein. Ein globaler Bezeichner wird außerhalb von Funktionen deklariert und ist im gesamten Programm verfügbar. Ein lokaler Bezeichner wird innerhalb einer bestimmten Funktion deklariert und ist nur innerhalb dieser Funktion verfügbar.

Bei Implementierungen von Programmiersprachen, die einen Compiler verwenden , sind Bezeichner oft nur Entitäten zur Kompilierzeit . Das heißt, das kompilierte Programm enthält zur Laufzeit Verweise auf Speicheradressen und Offsets anstelle der textuellen Bezeichnertoken (diese Speicheradressen oder Offsets wurden vom Compiler jedem Bezeichner zugewiesen).

In Sprachen, die Reflektion unterstützen , wie die interaktive Auswertung von Quellcode (mithilfe eines Interpreters oder eines inkrementellen Compilers), sind Bezeichner auch Laufzeitentitäten, manchmal sogar als erstklassige Objekte , die frei manipuliert und ausgewertet werden können. In Lisp werden diese Symbole genannt .

Compiler und Interpreter weisen einem Bezeichner aufgrund der tatsächlich verwendeten Zeichenfolge in der Regel keine semantische Bedeutung zu. Es gibt jedoch Ausnahmen. Zum Beispiel:

In einigen Sprachen wie Go basiert die Eindeutigkeit von Bezeichnern auf ihrer Schreibweise und ihrer Sichtbarkeit.

In HTML ist ein Bezeichner eines der möglichen Attribute eines HTML-Elements . Es ist innerhalb des Dokuments eindeutig.

Verweise

Siehe auch