lexikalische Analyse ist die erste Phase eines Compilers. Es nimmt die veränderten Quellcode von Sprache Präprozessoren, die in Form von Sätzen geschrieben werden. Die lexikalische Analyse bricht diese Syntax in eine Reihe von Token, indem Sie Entfernen alle white spaces oder Kommentare in den Quellcode.
Wenn die lexikalische Analysator findet ein Token ungültig ist, erzeugt einen Fehler es. Die lexikalische Analysator arbeitet eng mit der Syntax-Analysator. Es liest Zeichenströme aus dem Quellcode, prüft rechtliche Token und übergibt die Daten an die Syntax-Analysator, wenn es verlangt.
Lexeme werden gesagt, eine Folge von Zeichen (alphanumerisch) in einem Token sein. Es gibt einige vordefinierte Regeln für jedes Lexem als gültiges Token identifiziert werden. Diese Regeln werden durch Grammatikregeln definiert sind, mit Hilfe eines Musters. Ein Muster wird erklärt, was kann ein Zeichen sein, und diese Muster mit Hilfe von regulären Ausdrücken definiert.
In der Programmiersprache, Schlüsselwörter, Konstanten, Bezeichnern, Strings, Zahlen, Operatoren und Interpunktion Symbole als Zeichen angesehen werden.
Zum Beispiel in C-Sprache, die Variablendeklarationszeile
int value = 100;
enthält die Token:
int (keyword), value (identifier), = (operator), 100 (constant) and ; (symbol).
lassen uns verstehen wollen wie die Sprachtheorie verpflichtet sich die folgenden Begriffe:
irgendwelche endliche Menge von Symbolen {0,1} ist ein Satz von binären Alphabeten {0,1,2,3,4,5,6,7,8,9, A, B, C, D, E , F} ist ein Satz von Hexadezimal Alphabeten {a-z, A-Z} ist eine Reihe von Englisch Alphabete.
irgendwelche endliche Folge von Buchstaben wird als String. Länge des Strings ist die Gesamtzahl des Auftretens von Alphabeten, beispielsweise ist die Länge der Zeichenfolge howcodex 14 und wird bezeichnet durch | howcodex | = 14. Eine Zeichenkette, die keine Buchstaben, dh eine Folge von Null-Länge als leerer bekannter Schnur und durch ε (Epsilon) bezeichnet.
Ein typisches Hochsprache enthält die folgenden Symbole: -
Arithmetic Symbole | Addition (+), Subtraktion (-), Modulo (%), Multiplikation (*), Abteilung (/) |
Punctuation | Komma (,), Semikolon (;) (.), Dot, Pfeil (->) |
Zuordnung | = |
spezielle Zuordnung | +=, /=, *=, -= |
Vergleich | ==, !=, , >= |
Preprocessor | # |
Location Specifier | & |
Logische | &, &&, |, ||, ! |
Umschalt Operator | >>, >>>, <<, <<< |
Eine Sprache wird als eine endliche Menge von Strings über einem endlichen Satz von Alphabete betrachtet. Computersprachen werden als endliche Mengen berücksichtigt und rechnerisch gesetzt Operationen an ihnen durchgeführt werden. Finite Sprachen können mit Hilfe von regulären Ausdrücken beschrieben werden.
Wenn die lexikalische Analysator lesen Sie den Quellcode haben, durchsucht den Code buchstaben; und wenn er ein whitespace, Operator zeichen oder Sonderzeichen trifft, entscheidet er, dass ein Wort beendet ist.
Zum Beispiel:
int intvalue;
Beim Scannen sowohl Lexeme bis 'int', die lexikalische Analysator nicht feststellen kann, ob es sich um ein Schlüsselwort, int oder die Initialen Bezeichner int-Wert.
The Longest Spiel-Regel besagt, dass die Lexem gescannt auf Basis der längsten Übereinstimmung unter allen verfügbaren Tokens bestimmt werden.
Die lexikalische Analyse folgt auch Regelpriorität, wo ein reserviertes Wort, zB ein Schlüsselwort, einer Sprache Vorrang vor Benutzereingaben gegeben. Das heißt, wenn die Lexer ein Lexem, die mit jedem bestehenden reservierten Wort entspricht findet, sollte es zu einem Fehler.