m4 (Programmiersprache)

m4 ist eine Makro-Programmiersprache, die von Brian Kernighan und Dennis Ritchie entwickelt wurde.

Anwendung

Ein Makroprozessor ist ein Computerprogramm, das Zeichenfolgen innerhalb eines Textes durch andere Zeichenfolgen ersetzt. Es ermöglicht z. B. die Erstellung und Benutzung von wiederverwertbaren Textbausteinen in Textverarbeitungsprogrammen.

Geschichte

Makroprozessoren waren weit verbreitet, als Computerprogramme noch hauptsächlich in Assembler geschrieben wurden. In diesen Anfangstagen der Computertechnik mussten Programmierer häufig immer wiederkehrende Textpassagen in ihren Programmen verwenden. Bald fing man an, einfache Möglichkeiten zu entwickeln, Text wiederzuverwenden. Schnell stellte sich heraus, dass man nicht nur ganze Textpassagen wiederverwenden konnte, sondern bei Bedarf auch einzelne Teile davon ersetzen und so komplexe Makros schreiben konnte. M4 wurde 1977 entwickelt. Es war die erste Makrosprache, mit der Rational Fortran (Ratfor) implementiert wurde, und ist heute Bestandteil der meisten Unix-Varianten. Ein Hauptanwendungsgebiet ist heutzutage das autoconf-Tool des GNU-Projektes. Darüber hinaus wird es auch für die Konfiguration des weit verbreiteten MTA sendmail verwendet.

Eigenschaften

M4 bietet folgende Funktionen:

  • Ersetzen von Text
  • Substituieren von Parametern
  • Einfügen von Dateien
  • Manipulation von Zeichenketten
  • Bedingte Ausdrücke
  • Arithmetische Ausdrücke
  • Schnittstelle zum Betriebssystem
  • Diagnosemöglichkeiten für den Programmierer

Anders als die meisten früheren Makroprozessoren ist M4 nicht auf irgendeine spezielle (Computer- oder menschliche) Sprache ausgelegt; historisch wurde es jedoch entwickelt, um den Ratfor-Dialekt von Fortran zu unterstützen. Darüber hinaus ist M4 nicht nur Turing-vollständig, sondern auch praktisch eine Programmiersprache.

Beispiel

Das nachfolgende Codefragment ist ein einfaches Beispiel, das z. B. als Teil einer HTML-Bibliothek verwendet werden kann. Es definiert ein Makro, welches Kapitel automatisch nummeriert:

divert(-1)
define(`H2_COUNT', 0)
define(`H2', `define(`H2_COUNT', incr(H2_COUNT))' dnl
  `<h2>H2_COUNT. $1</h2>')
divert(1)dnl
H2(Erstes Kapitel)
H2(Zweites Kapitel)
H2(Schluss)

M4 erzeugt daraus den folgenden Text:

<h2>1. Erstes Kapitel</h2>
<h2>2. Zweites Kapitel</h2>
<h2>3. Schluss</h2>

Freie Implementierungen

Es gibt eine GNU-Version von m4. FreeBSD, NetBSD und OpenBSD liefern darüber hinaus eigene Implementierungen der M4-Sprache.

Literatur

  • Brian W. Kernighan and Dennis M. Ritchie: The M4 macro processor. Technical report, Bell Laboratories, Murray Hill, New Jersey, USA, 1977.[1]
  • Kenneth J. Turner: Exploiting the m4 macro language. Technical Report CSM-126, Department of Computing Science and Mathematics, University of Stirling, Scotland, September 1994.[2]
  • René Seindal: GNU M4 Manual. GNU Press 2004.[3]

Weblinks

Einzelnachweise

  1. http://wolfram.schneider.org/bsd/7thEdManVol2/m4/m4.pdf
  2. http://www.cs.stir.ac.uk/~kjt/research/pdf/expl-m4.pdf
  3. http://www.gnu.org/software/m4/manual/