Compilation

Disponible uniquement sur Etudier
  • Pages : 7 (1734 mots )
  • Téléchargement(s) : 0
  • Publié le : 29 août 2011
Lire le document complet
Aperçu du document
Compilation Conception de grammaire
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 secondprincipe : ˆ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 syntaxiquementune 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 Cest suite de d´clarations (variables, types ou e

fonctions)
programmeC ::= ( declaration )* declaration ::= declVars | declType | declFonc | defFonc • une d´claration de variables (oublions pointeurs et tableaux) e

est une suite de noms avec ´ventuellement une initialisation e
declVars ::= type declVar ( "," declVar )* declVar ::= IDENT [ "=" expr ] • une d´claration/d´finition de fonction ades param`tres et e e e

´ventuellement un corps e
declFonc ::= entete ";" defFonc ::= entete bloc entete ::= ( type | "void" ) IDENT "(" [parFormels] ")" parFormels ::= parFormel ( "," parFormel)* parFormel ::= type [ IDENT ]
Universit´ de Nice - Sophia Antipolis Licence 3 Informatique 2008-2009 e 4/14

Conception (partielle) d’une grammaire pour C
les blocs

• un bloc est une suited’instructions pr´c´d´e ´ventuellement e e e e

de d´clarations e
bloc ::= "{" ( declBloc )* ( instruction )* "}" declBloc ::= declVar | declType | declFonc on aurait pu utiliser declaration : on aurait alors accept´ e

syntaxiquement une d´finition de fonction dans un bloc e
• ce qui aurait l’avantage de ne pas provoquer une erreur

syntaxique difficilement rattrapable si le cas arrivait
• onpeut toujours positionner un bool´en si on a une d´finition e e

de fonction, et ´mettre un message d’erreur (qui de plus sera e plus explicite, du genre “on n’a pas le droit de d´finir une e fonction dans un bloc”, plutˆt que “{ non attendu”) o

Universit´ de Nice - Sophia Antipolis Licence 3 Informatique 2008-2009 e

5/14

Conception (partielle) d’une grammaire pour C
les instructions• on a ´videmment plusieurs types d’instructions e instruction ::= bloc | ( [expression ] ";" ) | si | tantque | ...
• l’affectation est une expression en C et a + b; est l´gal bien e

que sans int´rˆt ee
• comme un appel de fonction est une expression, on r`gle le cas e

F(...);
• le fait que l’expression soit optionelle autorise l’instruction vide

(bien utile dans while (t[i++] !=...
tracking img