next up previous contents
suivant: Structure des données monter: Le compilateur précédent: Forme BNF de la   Table des matières

Points de génération

La grammaire présentée ci-dessus ne fait naturellement pas apparaître les points de génération. L'insertion de ces derniers ne s'est cependant pas faite sans peine. Le problème est, qu'au niveau de Yacc, tout ajout de point de génération modifie la grammaire. En effet, Yacc insère à chaque fois un nouveau symbole non terminal. Ainsi, la grammaire peut (et ne manque pas de) ne plus respecter les contraintes de Yacc en ce qui concerne le type de grammaire autorisé. Il s'agit alors de ruser, notamment en changeant subtilement de place les points de génération, sans pour autant changer en quoi que ce soit l'ordre de parcours désiré. D'une manière générale, il suffit en cas de problème de les remonter d'un niveau, en écrivant :

session :
      suite_de_phrases  .  
	  ;

suite_de_phrases :
      { Phrase(); } phrase  ;  suite_de_phrases
    | { Phrase(); } phrase 
	;
et non :

session :
      { Phrase(); } suite_de_phrases  .  
	  ;

suite_de_phrases :
      phrase  ;  { Phrase(); } suite_de_phrases
    | phrase 
	;
Nous n'étudierons pas plus précisément le placement des différents points de générations. Pour en savoir plus, il sera nécessaire de se reporter au fichier gloorp.y. En revanche, la section suivante décrit plus en détails leur fonctionnement, et notamment les structures de données qu'ils créent.
next up previous contents
suivant: Structure des données monter: Le compilateur précédent: Forme BNF de la   Table des matières
Alexandre DAGAN
2000-07-07