M4 (lenguaje de programación)


m4 es un procesador de macros de propósito general incorporado en sistemas operativos de tipo Unix y es un componente del estándar POSIX.

El lenguaje fue diseñado por Brian Kernighan y Dennis Ritchie para las versiones originales de UNIX. Es una extensión de un procesador de macros anterior llamado m3, escrito por Ritchie para una minicomputadora AP-3 desconocida.[1]

El pre-procesador de macros actúa como una herramienta de sustitución de texto y se utiliza para reutilizar plantillas de texto tanto en lenguajes de programación como en aplicaciones de edición y procesamiento de texto. La mayoría de los usuarios requieren m4 como dependencia de GNU autoconf.

Historia

Los procesadores de macros se hicieron populares cuando los programadores usaban lenguaje ensamblador con frecuencia. En esos primeros días de la programación, los programadores notaron que mucho de sus programas consistían en texto repetido y tomaron medidas simples para la reutilización del texto. Pronto descubrieron las ventajas de no solo reutilizar bloques enteros de textos sino también la de sustituir diferentes valores por parámetros similares. Esto definió el amplio rango de uso de los procesadores de macro.

En 1960, uno de los primeros procesadores de macros de propósito general era M6 usado en Bell Labs y desarrollado por Douglas McIlroy, Robert Morris y Andrew Hall.[2]

Kernighan y Ritchie desarrollaron m4 en 1977, basados en las ideas de Christopher Strachey. Las características distinguidas de este estilo de preprocesamiento de macros incluye:

  • Sintaxis libre de formas (no basados en líneas como los típicos procesadores de macros diseñados para procesamiento de lenguaje ensamblador)
  • Alto grado de re-expansión (los argumentos de una macro se expanden dos veces: una vez durante el escaneado y otra vez en tiempo de interpretación).

La implementación de Ratfor usó m4 como motor de macros desde el principio.

Ya en el 2020, muchas aplicaciones continúan usando m4 como parte del proyecto GNU autoconf. También aparece en el proceso de configuración de sendmail (un servidor de correo ampliamente usado) y para generar planos con la suite de herramientas gEDA. La Política de Referencias de SELinux depende en gran medida de m4.

m4 tiene muchos usos en la generación de código pero (como pasa con cualquier procesador de macros) los problemas pueden ser difíciles de debuggear.[3]

Características

  • m4 ofrece:
  • Sintaxis libre de formas, más que sintaxis basada en líneas.
  • Alto nivel de expansión de macros (los argumentos se expanden durante el escaneo y durante la interpretación).
  • Reemplazo de texto
  • Sustitución de parámetros
  • Inclusión de archivos
  • Manipulación de strings
  • Evaluación de condiciones
  • Expresiones aritméticas
  • Interfaz con el sistema
  • Diagnósticos para el programador
  • Programación independiente del lenguaje

A diferencia de los primeros procesadores de macros, m4 no apunta a ningún lenguaje humano o computadora en particular. A diferencia de algunos otros procesadores de macros, m4 es Turing completo y un lenguaje de progamación práctico.

Los identificadores sin comillas que coinciden con macros definidas son reemplazados por sus definiciones. Colocar identificadores en comillas posterga la expansión hasta, posiblemente, más tarde. Como cuando un string entre comillas se expanda como parte del reemplazo de macros.

A diferencia de la mayoría de los lenguajes, los strings en m4 son "citados" usando acentos graves (`) como delimitador de inicio y apóstrofres (') como delimitador de fin. Los delimitadores de inicio y fin distintos permiten el anidamiento arbitrario de comillas en los strings a ser usados, permitiendo un control más fino sobre como y cuándo tendrá lugar la expansión de macros en las diferentes partes del string.

Ejemplo

El siguiente fragmento da un ejemplo simple que podría formar parte de una librería para generar código HTML. Define una macro comentada para numerar secciones automáticamente:

divert(-1)

m4 tiene múltiples colas de salida que pueden ser manipuladas con la macro
`divert'. El rango de colas válidas va de 0 a 10, inclusive. Siendo la cola 0
la predeterminada. Como extensión, GNU m4 soporta más desviaciones,
limitado solo por el tamaño del tipo entero.

Llamar a la macro `divert' con una cola inválida causa que el texto se descarte
hasta la próxima llamada. Note que aún cuando la salida se descarta, son necesarias
las comillas alrededor de `divert' y otras macros para prevenir la expansion

# Las macros no son expandidas junto a los comentarios, lo que significa que 
# palabras clave como divert y otros built-ins pueden ser usados sin consecuencias

# Macro de utilidad HTML:

define(`H2_COUNT', 0)

# La macro H2_COUNT se redefine cada vez que se utiliza la macro H2:

define(`H2',
	`define(`H2_COUNT', incr(H2_COUNT))<h2>H2_COUNT. $1</h2>')

divert(1)dnl
dnl
dnl La macro dnl causa que m4 descarte el resto de la linea
dnl impidiendo que aparezcan lineas en blanco no queridas en la salida
dnl
H2(Primera Sección)
H2(Segunda Sección)
H2(Conclusión)
dnl
divert(0)dnl
dnl
<HTML>
undivert(1)dnl Una de las colas se pone en la salida
</HTML>

El procesamiento de ese código genera el sgte. texto:

<HTML>
<h2>1. Primera Sección</h2>
<h2>2. Segunda Sección/h2>
<h2>3. Conclusión</h2>
</HTML>

Implementaciones

FreeBSD, NetBSD y OpenBSD proveen implementaciones independientes del lenguaje m4. El proyecto Heirloom Development Tools incluye una versión libre del lenguaje m4, derivada de OpenSolaris.

GNU m4 es una implementación de m4 del proyecto GNU.[4][5]​ Está diseñada para evitar muchos tipos de límites arbitrarios encontrados en implementaciones tradicionales de m4, tales como longitud máxima de una lína, tamaño máximo de una macro o de número de macros. La eliminación de estos límites arbitrarios es uno de los objetivos declarados del proyecto GNU.[6]

Referencias

  1. Brian W. Kernighan and Dennis M. Ritchie. The m4 macro processor. Technical report, Bell Laboratories, Murray Hill, New Jersey, USA, 1977. PDF: https://wolfram.schneider.org/bsd/7thEdManVol2/m4/m4.pdf
  2. Cole, A. J. (1981) Macro Processors (2nd, revised ed.). CUP Archive. p. 254
  3. Kenneth J. Turner. Exploiting the m4 macro language. Technical Report CSM-126, Department of Computing Science and Mathematics, University of Stirling, Scotland, September 1994. PDF: http://www.cs.stir.ac.uk/~kjt/research/pdf/expl-m4.pdf
  4. «gnu.org». www.gnu.org (en inglés). Consultado el 23 de junio de 2020. 
  5. «gnu.org». www.gnu.org (en inglés). Archivado desde el original el 25 de octubre de 2020. Consultado el 23 de junio de 2020. 
  6. «Semantics (GNU Coding Standards)». www.gnu.org. Consultado el 23 de junio de 2020. 

Read other articles:

Harwin Wasisto Wakil Gubernur Jawa Timur ke-1Masa jabatan1993–1998GubernurBasofi Sudirman PenggantiImam SupardiBupati Banyuwangi 23Masa jabatan1988–1991 PendahuluS. Djoko WasitoPenggantiTuryono Purnomo Sidik Informasi pribadiKebangsaanIndonesiaSunting kotak info • L • B Harwin Wasisto adalah mantan Bupati Banyuwangi yang pernah menjabat pada periode 1988 hingga 1991.[1] Selain itu ia juga pernah menjabat sebagai Wakil Gubernur Jawa Timur periode 1993 hingga 1...

 

Artikel ini perlu diwikifikasi agar memenuhi standar kualitas Wikipedia. Anda dapat memberikan bantuan berupa penambahan pranala dalam, atau dengan merapikan tata letak dari artikel ini. Untuk keterangan lebih lanjut, klik [tampil] di bagian kanan. Mengganti markah HTML dengan markah wiki bila dimungkinkan. Tambahkan pranala wiki. Bila dirasa perlu, buatlah pautan ke artikel wiki lainnya dengan cara menambahkan [[ dan ]] pada kata yang bersangkutan (lihat WP:LINK untuk keterangan lebih lanjut...

 

Bendera Aliansi Teh Susu dibuat oleh netizen (Warna bendera berbelok dari kiri melambangkan teh susu Thailand, teh susu Hong Kong dan teh susu Taiwan) Aliansi Teh Susu (Inggris: Milk Tea Alliancecode: en is deprecated ) adalah sebuah istilah yang dipakai untuk menyebut gerakan solidaritas demokrat daring yang terdiri dari para warganet dari Thailand, Hong Kong, dan Taiwan. Istilah tersebut awalnya dimulai sebagai sebuah meme dan berubah menjadi gerakan protes lintas nasional dinamis untuk men...

D'Amico UM ToolsInformationsStatut Continentale (depuis 2014)Code UCI AZT (depuis 2014)Discipline Cyclisme sur routePays  ItalieCréation 2014Saisons 11Marque de cycles BottecchiaEncadrementDirecteur général Ivan De PaolisDirecteur sportif Massimo CodolDénominations2014 Area Zero2015-2016 D'Amico Bottecchia2017-2018 D'Amico-Utensilnord2019-2023 D'Amico UM Toolsdepuis 2024 UM Tools Caffè Mokambomodifier - modifier le code - modifier Wikidata L'équipe cycliste D'Amico UM Tools est une...

 

Voce principale: Associazione Calcistica Perugia Calcio. Associazione Calcistica Perugia CalcioStagione 2017-2018Sport calcio Squadra Perugia Allenatore Federico Giunti, poi Roberto Breda, poi Alessandro Nesta Presidente Massimiliano Santopadre Serie B8º posto. Perde il turno preliminare dei play-off. Coppa ItaliaQuarto turno Maggiori presenzeCampionato: Di Carmine (40)Totale: Di Carmine, Buonaiuto (41) Miglior marcatoreCampionato: Di Carmine (22)Totale: Di Carmine (22) StadioRenato Cu...

 

The Rat Cover of the first editionAuthorGünter GrassOriginal titleDie RättinTranslatorRalph ManheimCountryWest GermanyLanguageGermanPublisherLuchterhandPublication date1986Published in English1987Media typePrint (Hardcover and Paperback)Pages504ISBN3-472-86624-1 The Rat (German: Die Rättin, literally The Ratess) is a 1986 novel by the German writer Günter Grass. Structure and content The plot is composed of many narrative strands and oscillates between fairytale, travelogue...

Spicy Korean stew or casserole Gopchang-jeongolAlternative namesBeef tripe hot potTypeJeongolPlace of originKoreaMain ingredientsGopchang (beef small intestines)Ingredients generally usedVegetables, seasonings, beef broth  Media: Gopchang-jeongol Korean nameHangul곱창전골Revised Romanizationgopchang-jeongolMcCune–Reischauerkopch'ang-jŏn'golIPA[kop̚.tɕʰaŋ.dʑʌn.ɡol] Gopchang-jeongol[1] (곱창전골) or beef tripe hot pot[1] is a spicy Korean ...

 

This article needs to be updated. Please help update this article to reflect recent events or newly available information. (January 2015) This article includes a list of general references, but it lacks sufficient corresponding inline citations. Please help to improve this article by introducing more precise citations. (June 2014) (Learn how and when to remove this message) For the Russian anarchist communist organisation known as The Black Banner, see Chernoe Znamia. Black Banner Organizati...

 

Державний комітет телебачення і радіомовлення України (Держкомтелерадіо) Приміщення комітетуЗагальна інформаціяКраїна  УкраїнаДата створення 2003Керівне відомство Кабінет Міністрів УкраїниРічний бюджет 1 964 898 500 ₴[1]Голова Олег НаливайкоПідвідомчі ор...

「アプリケーション」はこの項目へ転送されています。英語の意味については「wikt:応用」、「wikt:application」をご覧ください。 この記事には複数の問題があります。改善やノートページでの議論にご協力ください。 出典がまったく示されていないか不十分です。内容に関する文献や情報源が必要です。(2018年4月) 古い情報を更新する必要があります。(2021年3月)出...

 

This article relies excessively on references to primary sources. Please improve this article by adding secondary or tertiary sources. Find sources: Kings of Colosseum 2024 – news · newspapers · books · scholar · JSTOR (March 2024) (Learn how and when to remove this message) 2024 Major League Wrestling event Kings of Colosseum (2024)Promotional poster featuring various competitorsPromotionMajor League WrestlingDateJanuary 6, 2024CityPhiladelphia, ...

 

豪栄道 豪太郎 場所入りする豪栄道基礎情報四股名 澤井 豪太郎→豪栄道 豪太郎本名 澤井 豪太郎愛称 ゴウタロウ、豪ちゃん、GAD[1][2]生年月日 (1986-04-06) 1986年4月6日(38歳)出身 大阪府寝屋川市身長 183cm体重 160kgBMI 47.26所属部屋 境川部屋得意技 右四つ・出し投げ・切り返し・外掛け・首投げ・右下手投げ成績現在の番付 引退最高位 東大関生涯戦歴 696勝493敗...

Dutch swimmer (born 1943) For the Dutch gymnast, see Ria van Velsen (gymnast). Ria van Velsen Medal record Women's swimming Representing the  Netherlands European Championships 1962 Leipzig 100 m backstroke 1962 Leipzig 4×100 m medley Maria Martina Ria van Velsen (born 22 March 1943 in The Hague) is a retired Dutch backstroke swimmer who participated in the 1960 and 1964 Summer Olympics. In 1960, she was sevenths individually in the 100m backstroke event. She was also part of the Dutch ...

 

Japanese Society redirects here. For the book, see Japanese Society (book). Not to be confused with Javanese culture. Ukiyo-e, The Great Wave off Kanagawa, by HokusaiHimeji Castle is a World Heritage Site and a National Treasure of Japan.Osechi, New Year special dishes in three-tiered box Part of a series on theCulture of Japan History Era names Demographics Historical currency Economic history Education, Science, and Technology Healthcare Imperial history Foreign relations Historiography Mi...

 

River in Pennsylvania, United States Juniata RiverThe Appalachian Trail crossing the mouth of the Juniata River. Photo by Carol M. HighsmithJuniata River watershed and tributariesLocationCountryUnited StatesStatePennsylvaniaCountiesDauphin, Perry, Juniata, Mifflin, Huntingdon, Bedford, SomersetCitiesDuncannon, Newport, Millerstown, Thompsontown, Port Royal, Mifflintown, Lewistown, Mount Union, HuntingdonPhysical characteristicsSourceFrankstown Branch • locationBlair Count...

For other uses, see Shaver Lake (disambiguation). Reservoir in Fresno County, CaliforniaShaver LakeShaver LakeShow map of CaliforniaShaver LakeShow map of the United StatesLocationSierra National ForestFresno County, CaliforniaCoordinates37°07′33″N 119°17′27″W / 37.12597°N 119.29075°W / 37.12597; -119.29075TypeReservoirPrimary inflowsStevenson CreekPrimary outflowsStevenson CreekBig CreekCatchment area29.3 sq mi (76 km2)Basin countriesUn...

 

Anna Charlotta SchröderheimAnna Charlotta Schröderheim, wearing the Nationella dräkten with its high collar, used by ladies-in waiting or women presented at court.BornAnna Charlotta von Stapelmohr24 September 1754Stockholm, SwedenDied1 January 1791Stockholm, SwedenNationalitySwedishOther namesAnn-Charlotte Schröderheim, Anne-Charlotte SchröderheimKnown forSalonist and wit, love affairs Card-Party in the Home of Elis Schröderheim by Pehr Hilleström. Anna Charlotta Schröderhei...

 

American politician Howard WolpeMember of the U.S. House of Representativesfrom Michigan's 3rd districtIn officeJanuary 3, 1979 – January 3, 1993Preceded byGarry BrownSucceeded byPaul HenryMember of the Michigan House of Representativesfrom the 46th districtIn officeJanuary 1, 1973 – December 31, 1976Preceded byWilliam V. WeberSucceeded byMary C. Brown Personal detailsBornHoward Eliot Wolpe(1939-11-03)November 3, 1939Los Angeles, California, U.S.D...

This article needs to be updated. The reason given is: Official results needed.. Please help update this article to reflect recent events or newly available information. (February 2017) 2016–17 Haitian Senate election ← 2015-16 20 November 2016 (first round)29 January 2017 (second round) Next → Party Leader % Seats +/– PHTK 6 Plateforme Vérité 3 KID 3 OPL 1 FL 1 AAA 1 Pont 1 PPD 1 LIDE 1 This lists parties that won seats. See the complete results below.Politics of...

 

Federación de los Independientes de Aragón Presidente José María Abad TorresFundación 2006Sede San José de Calasanz, 29 50008Zaragoza (España)País EspañaConcejales en Aragón 13/4359Sitio web www.fia-independientes.es/[editar datos en Wikidata] La Federación de los Independientes de Aragón (FIA) es uno de los pequeños partidos políticos de Aragón (España),[1]​ de ámbito municipal y autonómico. La Federación fue creada con la intención de aglutinar a todos lo...