Précédent Index Suivant

Barrière syntaxique

 

 
La barrière syntaxique est constituée d'une longue kyrielle de fonctions pour reconnaître (reconnaisseurs qui ont pour type de résultat bool) et extraire (accesseurs) de l'information des diverses formes syntaxiques possibles. Contrairement à ce que nous avons fait jusqu'alors, elles sont données règle de grammaire par règle de grammaire et non en écrivant d'abord les reconnaisseurs puis les accesseurs.
 
Règle expression := ... (début)
 
108  ;;; variable?: Expression -> bool
124  ;;; citation?: Expression -> bool
133  ;;; conditionnelle?: Expression -> bool
137  ;;; conditionnelle-clauses: Conditionnelle -> LISTE[Clause]
141  ;;; alternative?: Expression -> bool
145  ;;; alternative-condition: Alternative -> Expression
149  ;;; alternative-consequence: Alternative -> Expression
153  ;;; alternative-alternant: Alternative -> Expression
159  ;;; sequence?: Expression -> bool
163  ;;; sequence-exps: Sequence -> LISTE[Expression]
 

 
Noter, encore une fois, comme ces spécifications suivent la grammaire. Pour l'implantation, rien à dire, hormis peut-être les implantations un peu longues de variables? (pour exclure les mots-clefs) et citation? (car nous avons mis ensemble les constantes et les données « quotées »).
 
Noter la définition de alternative-alternant : l'alternant est facultatif. Lorsque la condition est fausse et que l'alternant est absent, la fonction alternative-alternant retourne false, ce qui est permis par la norme de Scheme.
 
Règle expression := ... (suite et fin)
 
167  ;;; bloc?: Expression -> bool
171  ;;; bloc-liaisons: Bloc -> LISTE[Liaison]
175  ;;; bloc-corps: Bloc -> Corps
179  ;;; application?: Expression -> bool
183  ;;; application-fonction: Application -> Expression
187  ;;; application-arguments: Application -> LISTE[Expression]
 

 
On suit toujours la règle de grammaire...
 
Règle clause := ...
 
191  ;;; clause-condition: Clause -> Expression
195  ;;; clause-expressions: Clause -> LISTE[Expression]
 

 
Rien à dire...
 
Règle liaison := ...
 
199  ;;; liaison-variable: Liaison -> Variable
203  ;;; liaison-exp: Liaison -> Expression
 

 
Rien à dire...
 
Règle corps := ...
 
207  ;;; definition?: Corps -> bool
  ;;; (definition? corps) rend #t ssi le premier élément du corps
  ;;; "corps" est une définition
 

 
Ici, nous avons donné la spécification complète car c'est une forme de règle de grammaire que nous n'avons encore pas vue: un corps est une suite (éventuellement vide) de définitions suivie d'une suite (non vide) d'expressions. Deux applications de cette règle diffèrent donc -- et c'est pourquoi nous donnons un reconnaisseur -- selon que le premier élément est, ou n'est pas, une définition:
 
Règle definition := ...
 
213  ;;; definition-nom-fonction: Definition -> Variable
217  ;;; definition-variables: Definition -> LISTE[Variable]
221  ;;; definition-corps: Definition -> Corps
 

 
Facile...
 


Auteur(s): titou@ufr-info-p6.jussieu.fr.Mainteneur de la page: titou@ufr-info-p6.jussieu.fr.

Précédent Index Suivant