Scanner und Parser: Grundlagen der Codeanalyse
Der Scanner, auch als Lexer bekannt, ist für die lexikalische Analyse zuständig. Er zerlegt den Quelltext in lexikalische Einheiten, die sogenannten Tokens, und ordnet diese verschiedenen Mustertypen zu. Diese Zerlegung ist ein kritischer erster Schritt in der Verarbeitung von Programmcode.
Definition: Tokens sind die kleinsten bedeutungstragenden Einheiten in einem Programmtext, wie Variablenbezeichner oder Zuweisungsoperatoren.
Der Scanner identifiziert auch lexikalische Fehler, die auftreten, wenn eine korrekte Zerlegung nicht möglich ist.
Example: Ein lexikalischer Fehler wäre "b= 8.1 + za#hl", wobei "za#hl" kein gültiger Bezeichner ist.
Der Parser übernimmt die syntaktische Analyse des Codes. Er überprüft, ob die vom Scanner erstellten Tokens den Grammatikregeln der Programmiersprache folgen.
Highlight: Ein wichtiger Aspekt der Arbeit des Parsers ist die Erstellung des Parse-Baums, der eine strukturierte Darstellung des Programms in Baumform bietet.
Der Parser erkennt syntaktische Fehler, wie falsche Klammerung oder unerlaubte doppelte Zuweisungen.
Example: "b = b = a−5)" enthält einen syntaktischen Fehler aufgrund der falschen Klammerung und der doppelten Zuweisung.
Zusätzlich zur syntaktischen Analyse kann der Parser auch semantische Fehler erkennen, wie Typüberprüfungen und falsche Variablendeklarationen.
Example: "int a = "String"" wäre ein semantischer Fehler, da einer Integer-Variable ein String zugewiesen wird.
Die Kombination aus Scanner Lexer und Parser bildet das Fundament für die Verarbeitung und Analyse von Programmcode, was für Compiler und Interpreter unerlässlich ist.