Compilation
Jacques Farr´ e Jacques.Farre@unice.fr
Universit´ de Nice - Sophia Antipolis Licence 3 Informatique 2008-2009 e
1/14
Comment concevoir une grammaire ?
• un premier principe : ne pas essayer de mettre des aspects
contextuels dans une grammaire non contextuelle
• ces aspects seront trait´s par la passe de s´mantique statique e e
• un second principe : ˆtre g´n´ral est souvent plus simple que e e e
prendre les choses par le petit bout de la lorgnette
• y compris accepter syntaxiquement un langage plus large,
quitte ` restreindre dans la s´mantique statique a e • d´finir les constructions principales du langage : par exemple, e
pour un langage de programmation, d´clarations (de type, de e variable, de fonction), expressions, instructions, d´signations e de variable . . .
Universit´ de Nice - Sophia Antipolis Licence 3 Informatique 2008-2009 e
2/14
Quelques exemples
• ne pas essayer de mettre des aspects contextuels
• en C, int t[3*N + M] est autoris´ ` condition que N et M ea
soient des constantes, mais il est difficile de d´finir e syntaxiquement ce qu’est une expression constante ⇒ accepter syntaxiquement une expression et v´rifier plus tard que tous e ses op´randes repr´sentent des constantes e e • ˆtre g´n´ral est souvent plus simple e e e • d´claration de m´thode Java (extrait de la doc de Javacc) e e void MethodDeclaration() : {} { ( "public" | "protected" | "private" | "static" | "abstract" | "final" | "native" | "synchronized" )* ResultType() MethodDeclarator() [ "throws" NameList() ] ( Block() | ";" ) }
on accepte les r´p´titions (et mˆme des mots contradictoires e e e comme public et private) : plus facile que de pr´voir toutes e les combinaisons l´gales et on r`gle la question par un tableau e e de bits par exemple
Universit´ de Nice - Sophia Antipolis Licence 3 Informatique 2008-2009 e 3/14
Conception (partielle) d’une grammaire pour C le niveau global
• un programme C