Compiler ist ein Programm, das ein Programm liest, das in einer Sprache (der Ausgangssprache) geschrieben ist, und es in ein anderes äquivalentes Programm in einer anderen Sprache (der Zielsprache), meistens Maschinensprache, übersetzt.
Es gibt verschiedene Phasen des Compilers, in denen der Quellcode zeilenweise gescannt wird. Es gibt eine Symboltabelle, in der alle Keywords aufgeführt sind, nach denen im Quellcode gesucht wird.
Phase 1: Lexical Analyzer - liest alle Zeichen im Quellprogramm und bildet die logische Trennung der Token (int, char, float, if-else, for, while usw.)
Phase 2: Syntax Analyzer - Analyse der Struktur von Tokenströmen. Hierarchisches Parsen von Ausdrücken, einschließlich Postfix / Präfix usw. (a = b + c * d)
Phase 3: Semantic Analyzer - Typüberprüfung von Tokens (Ganzzahl zu Real, Float usw.) und vielen Dingen wie Operator-Priorität usw.
Phase 4: Zwischencode-Generator - a = b + c * de (temp1 = c * d, temp2 = temp1 + b, temp3 = temp2-e)
Phase 5: Code-Optimierung - Verschiedene Analysen (Kontrollfluss, Datenfluss, Transformationen)
die Folgendes beinhalten: Redundanzcode, Konstanten-Propogation, Teil-Dead-Code, gemeinsamer Teilausdruck, Schleifen-Invarianten-Code
Phase 6: Codegenerierung - Generierung von Zielcode (meistens Assembler), wobei Werte in Register eingetragen werden
All diese Phasen sind nichts anderes als gut geschriebene Programme und es könnte N Fehler in der Anzahl geben.