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):
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.
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; } }
Voici le bnf que j'en ai déduit:
<S> identifie le début du fichier et € signifie epsilon.
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> "}"
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.
Partager