Salut à tous.
Voila, j'ai un projet de compilateur à faire. Première étape: écrire la grammaire du langage, en bnf. Je suppose que c'est le meilleur forum pour ça.
Comme je suis prudent vis à vis des domaines que je connais mal, je suis venu vous demander votre avis pour être sur que ma grammaire n'est pas ambiguë. Voici un exemple du langage (je zape les détails des analyseurs lexicaux et sémantiques):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
objet "Je suis un joli objet" {
   couleur= blanc noir rouge;
   sousobjet {
      resousobjet "encore un objet" {
         taille = 5;
      }
      forme=carre;
   }
}
Comme vous le voyez, ça permet de déclarer des objets contenant des propriétés ou d'autres objets. Les objets peuvent avoir un nom entre guillemets si désiré et les propriétés peuvent avoir une ou plusieurs valeurs.
Voici le bnf que j'en ai déduit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
<S>::=<bloc>
<bloc>::=<declaration> <bloc>|€
<declaration>::=<property>|<objet>
<property>::=identifiant "=" <listvalue> ";"
<listvalue>::=<value> <listvalue>|<value>
<value>::=nombre | identifiant
<object>::=identifiant "{" <bloc> "}" | identifiant chaine "{" <bloc> "}"
<S> identifie le début du fichier et € signifie epsilon.
Je doute un peu pour la définition de <bloc> (je veux juste y mettre autant de <property> et de <object> que je veux dans n'importe quel ordre) et de <listvalue> (ça doit pouvoir contenir de 1 à N <value>).
S'il y a des pros du bnf dans le coin, qu'est ce que vous en pensez?
Merci d'avance.