WikiDer > M4 (Programmiersprache)

m4 (programmeertaal)
m4
Designer(s)Brian Kernighan, Dennis Ritchie.
Veröffentlicht1977
Letzte Version1.4.18 
(31. Dezember 2016)
KategorieMakro-Präprozessor
Versionskontrollegit.savannah.gnu.org
Portal  Portalsymbol  Informatik

M4 (normalerweise mit einem Kleinbuchstaben geschrieben: m4) ist ein Makroprozessor das bei allen Unix-ähnliche Betriebssysteme, einschließlich GNU und Linux, wird verwendet und ist Teil der POSIX-Standard. Mehrere UNIX-Varianten verwenden proprietäre Implementierungen von m4.[1][2]

Die Sprache wurde entworfen von Brian Kernighan und Dennis Ritchie für die Originalversionen von UNIX. Es ist eine Erweiterung eines früheren Makroprozessors m3, das von Ritchie für den Minicomputer AP-3 geschrieben wurde.

Die m4-Sprache ist Turing-komplett, wird aber hauptsächlich von anderen Programmen als Makro verwendetPräprozessor zum Ersetzen von Textteilen in Textdateien. Es ist ein Werkzeug zum Schreiben von Computerprogrammen, kann aber auch zum Bearbeiten von Texten und für Textverarbeitungsprogramme verwendet werden. GNU m4 wird am häufigsten von GNUs verwendet autoconf.

Geschichte

Makroprozessoren waren in der Zeit, als Computer es waren, beliebte Werkzeuge für Computerprogrammierer Assemblersprache musste programmiert werden. In dieser frühen Zeit stellten Programmierer fest, dass große Teile ihrer Programme aus sich wiederholenden Textblöcken bestanden. Sie entwickelten Methoden zur einfachen Wiederverwendung dieser Textblöcke, da sie die Vorteile der Wiederverwendung und des Ersetzens der Parameterwerte in diesen Textblöcken verstanden haben.

Kernighan und Ritchie entwickelten m4 1977 nach den Ideen von Christopher Strachey. Der m4-Makroprozessor zeichnete sich aus durch:

  • Freiform-Syntax (nicht regelbasiert, wie ein typischer Assembler-Präprozessor)
  • der hohe Reexpansionsgrad (die Argumente für Makros werden zweimal expandiert: einmal beim Scannen und einmal bei der Interpretation)

M4 wird häufig zur Codegenerierung verwendet, hat aber (wie jeder Makroprozessor) den Nachteil, dass der generierte Code normalerweise schwer zu debuggen ist.[3]

Eigenschaften

M4 bietet Systementwicklern folgende Möglichkeiten:

  • eine freie Syntax statt regelbasierter Syntax
  • ein hohes Maß an Makroexpansion (Argumente werden beim Scannen und erneut bei der Interpretation erweitert)
  • Textersetzung
  • Parametersubstitution
  • Dateieinbindung
  • Saitenmanipulation
  • bedingte Bewertung
  • arithmetische Ausdrücke
  • eine Systemschnittstelle
  • Programmierer-Diagnose
  • Unabhängigkeit von Programmiersprachen
  • Unabhängigkeit von der menschlichen Sprache
  • es bietet Programmiersprachenfunktionen

Im Gegensatz zu den meisten älteren Makroprozessoren zielt m4 nicht auf eine spezielle Computersprache oder menschliche Sprache ab. Historisch gesehen hat sich m4 aus der Entwicklung des Ratfor-Dialekts von . entwickelt fortran. Im Gegensatz zu einigen anderen Makroprozessoren ist m4 Turing-komplett und eine praktische Programmiersprache.

Bezeichner ohne Anführungszeichen, die mit definierten Makros übereinstimmen, werden durch ihre Definitionen ersetzt. Das Einschließen von Bezeichnern in Anführungszeichen kann die Erweiterung auf später verzögern, beispielsweise wenn eine Zeichenfolge in Anführungszeichen als Teil einer Makroersetzung erweitert wird. Im Gegensatz zu den meisten Sprachen werden Zeichenfolgen in m4 mit dem Backtick ( `) am Anfang und einem Apostroph ( ') am Ende zitiert. Durch die Verwendung separater erster und letzter Trennzeichen können Zeichenfolgen beliebig verschachtelt werden. Dies gibt ein hohes Maß an Kontrolle darüber, wie und wann die Makroerweiterung von Strings stattfindet.

Beispiel

Der folgende Codeausschnitt zeigt ein Beispiel für eine Bibliothekskomponente zum Generieren von HTML-Code. Der m4-Code definiert ein Makro, um Abschnitte in einer HTML-Datei automatisch zu nummerieren.

M4 bietet mehrere Funktionen Warteschlangen für den Export. Sie können zwischen den Warteschlangen wechseln mit der 'vielfältig'Makro.

divert(-1)Gültige Nummern für die Warteschlangen reichen von 0 bis 10, einschließlich der Warteschlange für die Standardausgabe mit der Nummer 0. Der Aufruf des Makros `divert' mit einer ungültigen Warteschlange führt dazu, dass die Ausgabe verschwindet, bis sich die Ausgabe in eine gültige ändert. Beachten Sie, dass selbst wenn die Ausgabe verworfen wird, Anführungszeichen um "Umleiten" und andere Makros erforderlich sind, um eine Erweiterung zu verhindern.# Makros werden in Kommentaren nicht erweitert, daher verwenden integrierte Schlüsselwörter,# wie z. B. umleiten, Kommentare ohne Wirkung # Das HTML-Hilfsprogramm-Makro H2_COUNT:define(`H2_COUNT', 0)# Das H2_COUNT-Makro wird jedes Mal neu definiert, wenn das H2-Makro verwendet wird#:define('H2', `define(`H2_COUNT' , incr(H2_COUNT))

H2_COUNT.$1

')divert(1)dnldnldnl Das dnl-Makro veranlasst m4, den Rest der Zeile zu verwerfen und verhindert, dass dnl unerwünschte leere Zeilen in der Ausgabe anzeigt. dnlH2(Erster Abschnitt)H2(Zweiter Abschnitt)H2 (Schlussfolgerung)dnldivert(0)dnldnlundirect (1)dnl Eine der Warteschlangen wird in die Ausgabewarteschlange geschoben.

Die Verarbeitung des obigen Codes mit m4 erzeugt den folgenden Text:

<HTML><h2>1. Erster Abschnitt</h2><h2>2. Zweiter Abschnitt</h2><h2>3. Fazit</h2></HTML>

Implementierungen

FreeBSD, NetBSD, und OpenBSD unabhängig eine eigenständig entwickelte Implementierung der m4-Sprache liefern. Darüber hinaus enthalten die Heirloom Project Development Tools eine kostenlose Version der m4-Sprache, abgeleitet von OpenSolaris.[4]

GNU-m4

GNU m4 ist eine Implementierung von m4 für das GNU-Projekt.[5][6] GNU m4 wurde entwickelt, um verschiedene willkürliche Maxima in traditionellen m4-Implementierungen zu vermeiden, wie z. B. maximale Zeilenlänge, maximale Größe eines Makros und Anzahl von Makros. Das Entfernen solcher willkürlichen Grenzen ist eines der erklärten Ziele des GNU-Projekts.[7]

GNU m4 wird von Gary V. Vaughan und Eric Blake gepflegt und unter den Bedingungen der GNU General Public License veröffentlicht. GNU m4 ist freie Software.

Externe Links