Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| dev:m4:start [2017/10/19 08:31] – créée yoann | dev:m4:start [2021/02/01 21:51] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | {{tag> | + | {{tag> |
| ====== M4 ====== | ====== M4 ====== | ||
| - | M4 est un langage de macro développé | + | M4 est la mise en œuvre |
| - | * définir des macros | + | * d'inclure des fichiers, |
| - | * inclure des fichiers | + | * d' |
| - | * Effectuer | + | * Appeler |
| - | * Appeler des programmes externes | + | |
| - | * structures et branchements conditionnels | + | |
| - | ===== Généralités ===== | ||
| - | Les commentaires commencent à partir du caractère | + | Le processeur de macro copie son entrée sur sa sortie en développant les macros internes ou définies par l'utilisateur. |
| - | ===== Définition de macro ===== | ||
| - | La fonction define() | + | ===== Généralités syntaxiques ===== |
| - | < | + | Lorsque m4 lit le fichier d' |
| - | # Définition de la macro test | + | |
| + | Un nom est une séquence de caractères alphanumériques commençant par une lettre ou le caractère ' | ||
| + | |||
| + | Une chaîne citée est une séquence de caractères encadrée par '' | ||
| + | |||
| + | ^ Entrée | ||
| + | | `essai' | ||
| + | | %%``essai2'' | ||
| + | |||
| + | Les commentaires commencent à partir du caractère '' | ||
| + | |||
| + | Les jetons ne faisant pas parti d'un nom, d'une chaîne citée ou d'un commentaire sont copiés directement sur la sortie. Lorsqu' | ||
| + | |||
| + | |||
| + | ==== Invocation d'une macro ==== | ||
| + | |||
| + | Pas d' | ||
| + | |||
| + | <file> | ||
| + | # macro_test est invoquée sans argument | ||
| + | macro_test | ||
| + | |||
| + | # macro_test invoquée avec 2 arguments | ||
| + | macro_test(arg1, | ||
| + | |||
| + | # macro_test invoquée avec 1 argument vide | ||
| + | macro_test() | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | Une macro définie sans argument s' | ||
| + | </ | ||
| + | |||
| + | La mise en citation d'une chaine peut éviter l' | ||
| + | |||
| + | <file txt test_quote.m4> | ||
| + | define(`macro', | ||
| + | |||
| + | # Le developpement de la macro est concatené aux caractères qui le suivent | ||
| + | # mais la mise en citation des caractères suivant empeche l' | ||
| + | # du nom de la macro interne divert et la chaine " | ||
| + | # en sortie. | ||
| + | |||
| + | macro(`v' | ||
| + | |||
| + | # Sans mise en citation des caractères suivant le nom de macro interne | ||
| + | # " | ||
| + | # | ||
| + | |||
| + | macro(`v' | ||
| + | </ | ||
| + | |||
| + | Tous les arguments d'une macros sont des chaînes de caractères mais certaines pourront être interprétées comme nombre, nom de fichier ou expression rationnelle etc. | ||
| + | |||
| + | Un argument vide n'est pas identique à un argument omis. Un argument omis utilise la valeur définie dans le prototype alors qu'un argument vide utilise explicitement une chaîne vide. | ||
| + | |||
| + | |||
| + | |||
| + | ==== Définition de macro ==== | ||
| + | |||
| + | La fonction define() permet de définir les macros. | ||
| + | Dans la plupart des cas, il faut consolider le nom de la macro pour éviter le développement en cas de redéfinition de la macro. | ||
| + | |||
| + | |||
| + | |||
| + | <file txt echec_redef.m4> | ||
| + | # Définition de la macro nommée | ||
| define(test, | define(test, | ||
| + | # Dans la définition ci dessous test est développé | ||
| define(test, | define(test, | ||
| - | # test est une macro, il est remplacé par un | + | |
| - | # on obtient | + | # on obtient: |
| + | # define(un, deux) | ||
| + | # La définition aboutit a une macro différente et non pas à la redéfinition de la macro test | ||
| test | test | ||