www.wikidata.de-de.nina.az
Als Makroprozessoren werden Computerprogramme bezeichnet die Zeichenfolgen innerhalb eines Textes durch andere Zeichenfolgen ersetzen Eine Zeichenfolge mit ihrem Ersatztext nennt man Makro Makros sind normalerweise parametrisierbar Die meisten Makroprozessoren kennen einige Befehle In der Regel dient zum Beispiel define zum Festlegen von Makros Andere Befehle erlauben oft Zeichenkettenverarbeitung bedingten Textersatz Schreiben und Lesen von Hilfsdateien usw Mitunter konnen Befehle und Makros sehr ahnlich verarbeitet werden Ein bekannter Makroprozessor ist z B Teil des Textsatzprogramms TeX Auch der C Praprozessor der Sprache C ist ein Makroprozessor Inhaltsverzeichnis 1 Der m4 Makroprozessor als Beispiel 2 Der Makroprozessor als Praprozessor 2 1 Der C Praprozessor 2 2 TeX und LaTeX 2 3 MediaWiki 3 Siehe auch 4 AnmerkungenDer m4 Makroprozessor als Beispiel BearbeitenDas Betriebssystem Unix enthalt standardmassig den Makroprozessor m4 Dieser erlaubt uber den Makro define die Definition eigener Makros define H Hans define U und define I Inge dnl H U I I U H H liebt I ergibt Hans und Inge Inge und Hans Hans liebt Inge Die Zeichen auf einer deutschen Tastatur rechts neben dem Fragezeichen und rechts neben dem A sorgen dafur dass Makros nicht ersetzt werden wenn sie innerhalb eines Teils sind der mit beginnt und mit endet Uber viele weitere eingebaute Makros wie eval ifelse lassen sich Ausdrucke und Bedingungen implementieren Wiederholungen und Schleifen konnen durch Rekursion erreicht werden Vordefinierte Makros im Makroprozessor m4 Auswahl Makro Beschreibungdefine name def Definition des neuen Makros name Ersatz mit defeval Auswertung eines arithmetischen Ausdrucksincr Erhohen des Arguments um einsifdef Bedingte Ausfuhrungdivert 1 Unterdruckung der Ausgabednl Unterdruckung des Rests der Zeile einschliesslich Zeilentrenner include Datei Text aus Datei einlesen und interpretieren 1 2 Parameter die innerhalb von def in einer Makrodefinition verwendet werden konnen und die dann durch den Text des aktuellen Parameters bei Aufruf ersetzt werden Mit einem Makroprozessor lassen sich zum Beispiel automatische Zahler implementieren define Zaehler define 1 incr 1 Kapitel 1 dnl define kapitelnr 0 dnl Zaehler kapitelnr Zaehler kapitelnr Zaehler kapitelnr Zaehler kapitelnr Wird dieses Beispiel mit m4 bearbeitet so erhalt man die folgende Ausgabe Kapitel 1 Kapitel 2 Kapitel 3 Kapitel 4 Damit lassen sich z B Kapitel und Abschnittsnummern in einem Text automatisch hochzahlen divert 1 dnl define Zaehler define 1 incr 1 1 define kapitelnr 0 define abschnittnr 0 define Kapitel lt h1 gt Zaehler kapitelnr 1 lt h1 gt define abschnittnr 0 define Abschnitt lt h2 gt kapitelnr Zaehler abschnittnr 1 lt h2 gt divert 0 dnl Kapitel Einfuhrung Dieser Text handelt von Abschnitt Geschichte Geschichtlich ist folgendes zu sagen Abschnitt Neuere Entwicklungen Doch in neuerer Zeit ergeben sich Kapitel Definitionen Abschnitt Zahlenwerte Abschnitt Konstanten Abschnitt Variablen Die Ausgabe von m4 ist dann lt h1 gt 1 Einfuhrung lt h1 gt Dieser Text handelt von lt h2 gt 1 1 Geschichte lt h2 gt Geschichtlich ist folgendes zu sagen lt h2 gt 1 2 Neuere Entwicklungen lt h2 gt Doch in neuerer Zeit ergeben sich lt h1 gt 2 Definitionen lt h1 gt lt h2 gt 2 1 Zahlenwerte lt h2 gt lt h2 gt 2 2 Konstanten lt h2 gt lt h2 gt 2 3 Variablen lt h2 gt Der Makroprozessor als Praprozessor BearbeitenEin Makroprozessor stellt eine Form von Praprozessor Vor Prozessor dar Er verandert einen Eingabetext bevor der Benutzer diesen dem eigentlichen Verarbeitungsprogramm ubergibt Unter Unix lassen sich viele Makroprozessoren in der Kommandozeile als eigene Prozesse aufrufen die Weitergabe des verarbeiteten Texts geschieht uber eine Pipe b m4 b diplomarbeit txt tbl eqn groff mt Tps kprinterHier wird die Datei diplomarbeit txt zunachst vom Makroprozessor m4 bearbeitet danach vom Tabellenprozessor tbl und vom Formelsatz Prozessor eqn beides Makroprozessoren um dann vom Textsatz Makro Prozessor groff in die Sprache Postscript gewandelt zu werden kprinter kann danach das Ergebnis auf einem Postscript fahigen Drucker ausgeben Der C Praprozessor Bearbeiten Die Programmiersprache C enthalt einen einfachen Makroprozessor den C Praprozessor Dieser kann fur die folgenden Aufgaben eingesetzt werden Definition von symbolischen Konstanten Bedingte Ubersetzung Erweiterung der Sprache durch einfache Sprachkonstrukte Vereinfachung der SchreibarbeitBefehle des C Praprozessors Auswahl Makro Beschreibung define name Ersatztext Definition des neuen Makros name Tritt name im Text auf wird es durch den Ersatztext ersetzt define name p1 p2 txt Definition des neuen Makros name mit den Parametern p1 und p2 Innerhalb von txt werden die Zeichenfolgen p1 und p2 durch den jeweiligen Text der aktuellen Parameter ersetzt ifdef name else endif Bedingte Ubersetzung Die Zeilen zwischen den Makros werden nur ubersetzt wenn ein Makro name existiert oder nicht FILE LINE Name und Zeilennummer der Datei die den Programmtext enthalt unix Vordefiniert unter Unix Betriebssystemen undefiniert unter anderen Systemen include lt datei gt include datei Datei einlesen und Text in die Ausgabe einfugen Die Moglichkeiten des C Praprozessors sind relativ eingeschrankt Er gibt der Sprache jedoch eine zusatzliche Flexibilitat die von anderen Sprachen kaum erreicht wird Allerdings fuhrt das in komplexen Programmsystemen auch zu Schwierigkeiten mit der Wartung und Pflege einheitlicher Definitionen weshalb nachfolgend entwickelte Programmiersprachen teilweise bewusst auf dieses Konzept verzichtet hatten Im folgenden Programmbeispiel define FIELDSIZE 100 int Feld FIELDSIZE main int i Feld 0 0 Feld 1 1 for i 2 i lt FIELDSIZE i Feld i Feld i 1 Feld i 2 wird FIELDSIZE einfach durch 100 ersetzt int Feld 100 main int i Feld 0 0 Feld 1 1 for i 2 i lt 100 i Feld i Feld i 1 Feld i 2 Erst dadurch entsteht ein Programmtext den der eigentliche C Compiler fehlerfrei ubersetzen kann 1 Das folgende Programm ermittelt ob es unter Unix kompiliert worden ist Andernfalls wird auf eine Eingabe gewartet include lt stdio h gt main printf Das Programm lauft ifdef UNIX printf unter Unix n else printf unter einem unbekannten Betriebssystem n printf Bitte drucken Sie eine Taste getchar endif Ein Unix Compiler wurde hier den folgenden Text ubersetzen main printf Das Programm lauft printf unter Unix n Ein Compiler eines unbekannten Betriebssystems wurde dagegen das folgende Programm ubersetzen main printf Das Programm lauft printf unter einem unbekannten Betriebssystem n printf Bitte drucken Sie eine Taste getchar Der C Makroprozessor ist jedoch viel einfacher als der m4 Prozessor Er erlaubt keine rekursiven Aufrufe Schleifen oder Auswertung von Ausdrucken TeX und LaTeX Bearbeiten Der Makroprozessor des Textsatzprogramms TeX kann fur benutzerdefinierte Erweiterungen verwendet werden Das Makropaket LaTeX von Leslie Lamport stellt eine verbreitete Erweiterung dar Statt define werden neue Makros durch newcommand definiert Einen Teil eines CD Covers zeigt das folgende Beispiel documentclass landscape dvips article usepackage cd cover newcommand lied 4 small textsf 1 amp small textsf 2 amp small textsf 3 amp small textsf 4 begin document begin tabular l l l l lied 1 Neneh Cherry Woman 04 10 lied 2 Luz Casal Piensa en mi 04 27 lied 14 Axelle Red Rester femme 05 01 end tabular end document MediaWiki Bearbeiten Die Wiki Engine MediaWiki enthalt einen Makroprozessor Hierzu werden Vorlagenseiten engl template erstellt die dann inklusive Parametern in eine Seite eingebunden werden konnen Siehe auch BearbeitenProzessor Software Anmerkungen Bearbeiten Tatsachlich erfolgt seit Jahrzehnten die Verarbeitung aber nicht mehr in zwei aufeinanderfolgenden Schritten sofern der Benutzer das Ergebnis des Preprocessing nicht ausdrucklich als Ausgabe zu sehen wunscht sondern in einem Durchgang wahrend der Kompilierung Abgerufen von https de wikipedia org w index php title Makroprozessor amp oldid 234749879