|
|
|
|
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. |
|
|
|
|
|