La grammaire d'un langage de programmation est très souvent présentée sous la forme dite grammaire BNF qui n'est autre qu'une version très légèrement différente de notre précédente notation.
Dans la convention d'écriture adoptée pour la forme BNF,
les éléments de sont des suites de lettres et symboles en
italique par exemple multiplicative-expression, unary-expression. Les règles ayant le même élément dans leur
partie gauche sont regroupées et cet élément n'est pas répété
pour chacune d'entre elles. Le symbole
est remplacé par : suivi d'un passage à la ligne. Quelques conventions
particulières permettent de raccourcir l'écriture, ainsi one
of permet d'écrire plusieurs règles sur la même ligne. Enfin, les
éléments de l'alphabet terminal
sont de plusieurs sortes. Il y a
ainsi des mots réservés, une trentaine dans chacun des deux
exemples, Pascal et C comme
begin
, end
, if
,
then
, else
, label
, case
, record
,
pour Pascal,
struct
, int
, if
, else
,
break
, ...pour le langage C.
Il y a aussi dans un certain nombre d'opérateurs et de
séparateurs souvent communs à Pascal et C comme
+ * / - ; , (
) [ ] = < >
. D'autres sont spécifiques à C, il s'agit de { }
# & % !
.
Dans les grammaires données en annexe, qui ne sont pas tout à fait complètes (manquent les variables et les nombres par exemple), on compte dans la grammaire de Pascal 69 lettres pour l'alphabet auxiliaire et 180 règles. Dans la grammaire du langage C, il y a 62 lettres auxiliaires et 165 règles. Du fait de leur taille importante, il est hors de question de traiter à titre d'exemples ces langages dans un cours d'analyse syntaxique. On se limitera ici aux exemples donnés plus haut comportant un nombre de règles limité mais dans lequel figurent déjà toutes les difficultés que l'on peut trouver par ailleurs.
On peut noter que l'on trouve la grammaire des expressions arithmétiques sous forme BNF dans les exemples concernant les langages Pascal et C des annexes. On remarque en effet à l'intérieur de la forme BNF de Pascal:
Ceci correspond dans notre notation à
Dans la grammaire du langage C, on retrouve aussi des règles qui rappellent singulièrement les précédentes: