Präprozessor
Ein Präprozessor (seltener auch Präcompiler<ref>{{#invoke:Vorlage:Literatur|f}}</ref>) 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 weiterzuverarbeiten.
Viele Programmiersprachen, zum Beispiel die Programmiersprache C sowie 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.
Im Bereich des CAD-Entwurfs, des CAM sowie der Finite-Elemente-Simulation wird häufig ein Präprozessor verwendet, um das entworfene Bauteil für die Weiterverarbeitung vorzubereiten. Hierzu gehören beispielsweise Arbeitsschritte wie Kombination mit einem anderen Bauteil, Aufteilung in Segmente, Gittererzeugung, Umsetzen in ein anderes Koordinatensystem usw.
Programmiersprachen-Präprozessoren
Der C-Präprozessor
{{#if: C-Präprozessor|{{#ifexist:C-Präprozessor|
|{{#if: |{{#ifexist:{{{2}}}|
|{{#if: |{{#ifexist:{{{3}}}|
|}}|}}|}}|}}|}}|Einbindungsfehler: Die Vorlage Hauptartikel benötigt immer mindestens ein Argument.}}
Der Präprozessor der Sprache C führt unter anderem die folgenden Änderungen am Programmtext durch, bevor der eigentliche C-Compiler das Programm übersetzt:<ref>British Standards Institute (Hrsg.): The C Standard – BS ISO/IEC 9899:1999. John Wiley & Sons, 2003, ISBN 0-470-84573-2. Abschnitte 5.1.1.2, 5.2.4.2.1 f., 6.10 ff.</ref>
- 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
#definedefinierten Makros - Bedingte Übersetzung von Zeilen, die zwischen
#if,#ifdef,#ifndef,#elifund#endifstehen, wobei#ifauch 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
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) zur Verfügung gestellt.<ref>Befehlsreferenz zum Thema „Präprozessoren“. freebasic-portal.de (deutsch).</ref>
Der TeX-Präprozessor
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.<ref>Offizielle LaTeX-Projektseite. latex-project.org (englisch).</ref><ref><templatestyles src="Webarchiv/styles.css" />{{#if:20100821184622
| {{#ifeq: 20100821184622 | *
| {{#if: List of TeX Frequently Asked Questions. | {{#invoke:WLink|getEscapedTitle|List of TeX Frequently Asked Questions.}} | {{#invoke:Webarchiv|getdomain|http://www.tex.ac.uk/cgi-bin/texfaq2html}} }} (Archivversionen)
| {{#iferror: {{#time: j. F Y|20100821184622}}
| {{#if: || }}Der Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
| {{#if: List of TeX Frequently Asked Questions. | {{#invoke:WLink|getEscapedTitle|List of TeX Frequently Asked Questions.}} | {{#invoke:Webarchiv|getdomain|http://www.tex.ac.uk/cgi-bin/texfaq2html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-05-08 10:23:04 InternetArchiveBot | 2019-05-08 10:23:04 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20100821184622}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
}}
| {{#if:
| {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
| {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
| 16= {{#if: List of TeX Frequently Asked Questions. | {{#invoke:WLink|getEscapedTitle|List of TeX Frequently Asked Questions.}} | {{#invoke:Webarchiv|getdomain|http://www.tex.ac.uk/cgi-bin/texfaq2html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-05-08 10:23:04 InternetArchiveBot | 2019-05-08 10:23:04 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| 9 = {{#if: List of TeX Frequently Asked Questions. | {{#invoke:WLink|getEscapedTitle|List of TeX Frequently Asked Questions.}} | {{#invoke:Webarchiv|getdomain|http://www.tex.ac.uk/cgi-bin/texfaq2html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-05-08 10:23:04 InternetArchiveBot | 2019-05-08 10:23:04 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }}
}}
| c|{{{webciteID}}}}} {{#if: List of TeX Frequently Asked Questions. | {{#invoke:WLink|getEscapedTitle|List of TeX Frequently Asked Questions.}} | {{#invoke:Webarchiv|getdomain|http://www.tex.ac.uk/cgi-bin/texfaq2html}} }} ({{#if: {{#if: 2019-05-08 10:23:04 InternetArchiveBot | 2019-05-08 10:23:04 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
| {{#if:
| Vorlage:Webarchiv/Today
| {{#if:
| Vorlage:Webarchiv/Generisch
| {{#if: List of TeX Frequently Asked Questions. | {{#invoke:WLink|getEscapedTitle|List of TeX Frequently Asked Questions.}} | {{#invoke:Webarchiv|getdomain|http://www.tex.ac.uk/cgi-bin/texfaq2html}} }}
}}}}}}}}{{#if:2019-05-08 10:23:04 InternetArchiveBot
| Vorlage:Webarchiv/archiv-bot
}}{{#invoke:TemplatePar|check
|all = url=
|opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
|errNS = 0
|template = Vorlage:Webarchiv
|format = *
|preview = 1
}}{{#ifexpr: {{#if:20100821184622|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
}}{{#if:
| {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
| web.archive.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}}
| webcitation.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}}
| archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
}}{{#if:
| {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
}}
}}{{#if:{{#invoke:URLutil|isHostPathResource|http://www.tex.ac.uk/cgi-bin/texfaq2html}}
|| {{#if: || }}
}}{{#if: List of TeX Frequently Asked Questions.
| {{#if: {{#invoke:WLink|isBracketedLink|List of TeX Frequently Asked Questions.}}
| {{#if: || }}
}}
| {{#if: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
}}{{#ifeq: {{#invoke:Str|find|http://www.tex.ac.uk/cgi-bin/texfaq2html%7Carchiv}} |-1
|| {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://www.tex.ac.uk/cgi-bin/texfaq2html%7C4}}%7Chttp}} |-1
|| {{#switch: {{#invoke:Webarchiv|getdomain|http://www.tex.ac.uk/cgi-bin/texfaq2html }}
| abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org =
| #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
}}
}}
}} tex.ac.uk (englisch)</ref>
Die Programmiersprache PHP
PHP ist eine Skriptsprache, die hauptsächlich zur Erstellung dynamischer Webseiten oder Webanwendungen verwendet wird. Wenn der Webserver eine Anfrage empfängt, liest er eine PHP-Datei. Enthält die Datei PHP-Start- und Endmarken wie <?php und ?>, so wird der Text zwischen diesen Markierungen vom Webserver als PHP-Programm interpretiert, ausgeführt und erst die Ausgabe des Programms (zusammen mit dem HTML-Code „darum“) wird an den anfragenden Webbrowser geschickt.
Eine Seite, die die aktuelle Uhrzeit ausgibt, könnte so aussehen: <syntaxhighlight lang="PHP"> <!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>
Aktuelle Uhrzeit
<?php print strftime('Jetzt ist es %H Uhr, %M Minuten und %S Sekunden'); ?>
</body>
</html> </syntaxhighlight>
Der PHP-Präprozessor wandelt dies z. B. um in <syntaxhighlight lang="html"><!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>
Aktuelle Uhrzeit
Jetzt ist es {{#timel:G}} Uhr, {{#timel:i}} Minuten und {{#timel:s}} Sekunden
</body>
</html> </syntaxhighlight>
Der Inhalt einer solchen Seite kann also bei Abruf dynamisch erstellt 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.
Präprozessor bei CAD, CAM und FEM
Ein in einem CAD-System entworfenes Bauteil, das mittels Finite-Elemente-Methode simuliert werden soll, muss zuvor mit einem Gitter überdeckt werden. Häufig sind zusätzlich Randbedingungen für die Simulation anzugeben, zum Beispiel, dass eine Seite des Bauteils fest eingespannt/verbunden ist, oder Drehzahl und Achse für eine Rotationsbewegung. Für derartige Angaben wird meist ein Präprozessor-Programm verwendet, der das entworfene Bauteil für die Weiterverarbeitung vorbereitet. Der Präprozessor muss sowohl das CAD-Format des Entwurfsprogramms einlesen können, als auch das Inputformat des FE-Lösers ausgeben können. Der Präprozessor bietet dann Eingabemasken für entsprechende Angaben. Aufgaben eines Präprozessors sind unter anderem auch:
- Kombination des Bauteils mit einem anderen Bauteil
- Aufteilung des Bauteils in Segmente
- Gittererzeugung
- Gitteranpassung
- Umsetzen in ein anderes Koordinatensystem
Andere Sprachen
Stylesheets der Sprache CSS können ebenfalls mit Präprozessoren erzeugt werden. Bekannte CSS-Präprozessoren sind Sass/SCSS und Less.
Siehe auch
Weblinks
|1|= – Bedeutungserklärungen, Wortherkunft, Synonyme, Übersetzungen |0|-= |X|x= |#default= –
}}{{#if:| {{#ifeq: {{{lang}}} | de | {{#ifeq: 0 | 0 | }} | ({{#invoke:Multilingual|format|{{{lang}}}|slang=!|shift=m}}) }}}}{{#invoke:TemplatePar|check
|opt= 1= 2= lang= suffix= |template=Vorlage:Wiktionary |cat=Wikipedia:Vorlagenfehler/Schwesterprojekt }}
Einzelnachweise
<references />
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Archiv-URL
- Wikipedia:Vorlagenfehler/Parameter:URL
- Wikipedia:Vorlagenfehler/Parameter:Linktext
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Linktext fehlt
- Wikipedia:Vorlagenfehler/Schwesterprojekt
- Programmierwerkzeug
- Computer Aided Engineering