Präprozessor

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Ein Präprozessor (seltener auch Präcompiler[1]) ist ein Computerprogramm, das Eingabedaten vorbereitet und zur weiteren Bearbeitung an ein anderes Programm weitergibt. Der Präprozessor wird häufig von Compilern oder Interpretern dazu verwendet einen Eingabetext zu konvertieren und das Ergebnis im eigentlichen Programm weiter zu verarbeiten. Die Programmiersprache C und das Textsatzprogramm TeX besitzen Makroprozessoren als Präprozessoren, die die Möglichkeiten der jeweiligen Sprache zur Steigerung der Lesbarkeit von Programmtexten sowie zur Strukturierung und Modularisierung von Projekten wesentlich erweitern. PHP – eine verbreitete Skriptsprache zur Generierung von Webseiten – kann als Präprozessor für HTML gesehen werden.

Der C-Präprozessor[Bearbeiten]

Hauptartikel: C-Präprozessor

Der Präprozessor der Sprache C führt unter anderem die folgenden Änderungen am Programmtext durch, bevor der eigentliche C-Compiler das Programm übersetzt:[2]

  • Ersetzen von Trigraph-Sequenzen wie ??=, ??(, ??) durch Symbole wie #,{,} (nicht beim K&R Standard)
  • Zusammenfügen von physischen zu logischen Quelltextzeilen (Entfernen der \-Zeilentrenner-Sequenzen) (nicht beim K&R Standard)
  • Ersetzen von Kommentaren durch Leerzeichen
  • Ersetzen von vordefinierten oder über #define definierten Makros
  • Bedingte Übersetzung von Zeilen, die zwischen #if, #ifdef, #ifndef, #elif und #endif stehen, wobei #if auch mit einfachen konstanten arithmetischen Ausdrücken und Vergleichsoperatoren umgehen kann
  • Rekursives Einfügen und Abarbeiten von Dateien per #include-Anweisung

Neben der einfachen Makroersetzung ist die bedingte Übersetzung mittels #if, #ifdef und #ifndef ein wichtiges Merkmal des C-Präprozessors: Der Entwickler kann damit steuern, welche Abschnitte des Programmtextes dem Compiler zugeführt werden und so beispielsweise Debug-Programmcode ein- oder ausblenden oder Anpassungen für unterschiedliche Prozessoren oder Betriebssysteme vornehmen.

Der FreeBASIC-Präprozessor[Bearbeiten]

Der Präprozessor von FreeBASIC funktioniert syntaktisch ähnlich wie der von C. Er interpretiert Anweisungen wie #if, #endif, #ifdef, #else, #define und #include ähnlich oder gleich wie in C. Zusätzlich werden noch Optionen wie #include once (Kein wiederholtes Einschleusen) und #macro ... #endmacro (Mehrzeiliges Macro) zu Verfügung gestellt.[3]

Der TeX-Präprozessor[Bearbeiten]

Die Fähigkeiten des im TeX-Satzsystem eingebauten Präprozessors beschränken sich im Wesentlichen auf die Definition von Makros zur Zusammenfassung von Formatierungsbefehlen. Darauf aufbauend wurden im Laufe der Zeit umfangreichere Präprozessoren (genauer: Makrosammlungen) für mitunter sehr spezielle Anwendungsgebiete entwickelt, um den Umgang mit TeX für den Benutzer komfortabler zu gestalten. Prominentester Vertreter ist LaTeX, weitere Beispiele sind ConTeXt, BibTeX und MusiXTeX.[4][5]

Die Programmiersprache PHP[Bearbeiten]

PHP (die rekursive Abkürzung steht für PHP: Hypertext Preprocessor) verarbeitet normalerweise serverseitig Webseiten. Eine Webseite wird eingelesen und an den Browser ausgegeben. Enthält die Seite PHP-Start- und Endmarken wie <?php und ?> an einer beliebigen Stelle, so wird der Text zwischen diesen Markierungen als PHP-Programm interpretiert, ausgeführt und die Ausgabe des Programms erscheint an Stelle des Programmtextes in der Webseite.

PHP ist eine vollwertige Programmiersprache mit der beliebige Algorithmen implementiert werden können. Eine Seite, die die aktuelle Uhrzeit ausgibt, könnte so aussehen:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
 <head>
   <title>Aktuelle Uhrzeit</title>
 </head>
 <body>
<h1>Aktuelle Uhrzeit</h1>
<p><?php print strftime('Jetzt ist es %H Uhr, %M Minuten und %S Sekunden'); ?></p>
 </body>
</html>

Der PHP-Präprozessor wandelt dies z. B. um in

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
 <head>
   <title>Aktuelle Uhrzeit</title>
 </head>
 <body>
<h1>Aktuelle Uhrzeit</h1>
<p>Jetzt ist es 14 Uhr, 30 Minuten und 21 Sekunden</p>
 </body>
</html>
Die dynamische Webseite im Browser (Ausschnitt)

Der Inhalt einer solchen Seite kann also dynamisch geändert werden. PHP verhält sich also tatsächlich wie ein Vor- oder Präprozessor, da der Originaltext verändert und erst danach zum Browser gesendet wird.

Siehe auch[Bearbeiten]

Weblinks[Bearbeiten]

 Wiktionary: Präprozessor – Bedeutungserklärungen, Wortherkunft, Synonyme, Übersetzungen

Einzelnachweise[Bearbeiten]

  1.  Helmut Herold, Michael Klar, Susanne Klar: C++, UML und Design Patterns. Grundlagen und Praxis der Objektorientierung. Addison-Wesley, München 2005, ISBN 3-8273-2267-7, S. 21 (eingeschränkte Vorschau in der Google-Buchsuche).
  2. British Standards Institute (Hrsg.): The C Standard - BS ISO/IEC 9899:1999. John Wiley & Sons, 2003. ISBN 0-470-84573-2. Abschn. 5.1.1.2, 5.2.4.2.1 f, 6.10 ff.
  3. deutschsprachige Befehlsreferenz zum Thema "Präprozessoren" auf www.freebasic-portal.de
  4. Offizielle LaTeX-Projektseite auf www.latex-project.org (englisch)
  5. List of TeX Frequently Asked Questions auf www.tex.ac.uk (englisch)