In diesem Abschnitt sollen die Funktionen des eigentlichen Compilers besprochen werden. 'Eigentlicher Compiler' deswegen, weil mit Compiler häufig auch die Software gemeint ist, die Präprozessor, Compiler und Linker umfaßt. Diese werden wir im Zweifelsfalle mit Compiler im weiteren Sinne (i.w.S.) bezeichnen. Teilweise wird der Begriff Compiler auch für komplette Programmierumgebungen genutzt, diese Verwendung soll hier aber nicht gebraucht werden.
Der eigentliche Compiler bekommt den vom Präprozessor überarbeiteten Quelltext und setzt ihn in einen sogenannten Objektcode um. Dieser Objektcode ist schon ein maschinennaher Code, der aber noch nicht ausgeführt werden kann, da er noch unaufgelöste Funktionsaufrufe enthält. D.h. an den Stellen, an denen eine Funktion aufgerufen werden soll, steht nur der Hinweis, welche Funktion dies ist und welche Parameter übergeben werden sollen. Der Objektcode ist somit nur ein Zwischencode, der noch weiter verarbeitet werden muß.
Viele Systeme speichern den Objektcode in seperate Dateien, die zumeist mit der Endung '.o' oder '.obj' gekennzeichnet sind. In der Regel kann man einen Compiler (i.w.S.) dazu bringen, nur diesen Code zu erzeugen, um ihn anderweitig weiterzuverwerten, zumeist wird er aber direkt an den Linker weitergegeben.
Während dieses Arbeitsganges wird auch auf syntaktische und grammatische Fehler im Programmtext geprüft und es wird teilweise versucht, logische Fehler anzuwarnen. Auch werden Tabellen angelegt, in denen Buch über die verwendeten Variablen geführt wird.