PRATIQUE ALGO/METHODES 
Expliquez-moi... les notations BNF et EBNF
 
Depuis plus de 40 ans, ces notations permettent de formaliser clairement les syntaxes de nombre de langages. Par extension, elles peuvent servir à en apprendre rapidement un nouveau. Voici comment les décoder. (01/09/2005)
  Forum

Réagissez dans les forums de JDN Développeurs

John Backus, créateur de Fortran, a conçu en 1959 une notation formelle permettant de décrire la syntaxe de n'importe quel langage - utilisée à l'époque pour présenter la syntaxe d'Algol 58. Peter Naur a ensuite repris ses travaux en préparation à Algol 60, et ses modifications font depuis partie intégrante de la notation BNF : Backus Naur Form.

BNF se base sur un nombre donné de métasymboles, avec lesquels décrire une syntaxe. Ces métasymboles sont combinés à des symboles "terminaux" (catégories définies par la syntaxe) et "non terminaux " (mots-clefs du langage lui-même). Il permet par exemple l'usage des symboles suivants :

La syntaxe BNF de base
Symbole
Utilisation
Traduction
Exemple
::=
ou
:=
Attribution
"est défini comme"
"contient"
x ::= "lapin!"
|
Alternatives
"ou"
x | y
x | y | z
< et >
encadre les noms des non terminaux
<SymboleNonTerminal>

Par exemple, pour définir les voyelles disponibles :
voyelle ::= "A" | "E" | "I" | "O" | "U"

Le langage Pascal emprunte une partie de sa syntaxe de BNF.

La notation BNF a ensuite été étendue sous le nom EBNF (Extended BNF). Cette extension permettait l'usage d'une syntaxe proche des expressions régulières pour décrire certains aspects, comme la répétition ou le regroupement de blocs.

Extensions de BNF
Symbole
Signification
x?
0 ou une occurrence de x
x+
au moins une occurrence de x
x*
0 ou plusieurs occurrences de x
x y
x suivi de y
( x y )
regroupement de la séquence x y, permettant de la différencier d'autres séquences

EBNF propose également de regroupement les éléments optionnels entre crochets : [ x | y | z ].

Depuis lors, la plupart des langages informatiques sont décrits suivant cette notation : EBNF se présente comme un métalangage concis et précis, idéal pour présenter toutes les facettes d'un syntaxe. Il interdit toute forme d'ambiguïté concernant l'interprétation de la spécification.

De fait, cela autorise à ceux qui la maîtrisent un apprentissage largement plus rapide qu'au travers d'explications lisibles de la syntaxe et des exemples qui l'accompagnent. Cependant, la trop grande précision de EBNF peut rendre son usage en phase d'apprentissage trop compliqué.

Par ailleurs, certains outils s'en servent pour traiter les fichiers sources de plusieurs langages différents. Par exemple, une spécification EBNF permet de créer rapidement des compilateurs, au moyen de "compilateur de compilateurs" comme Yacc.
 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page