/****************************************************************/
Type NonTerminalSyntaxique Defaut Final TailleSegment 16
/* Objet : Definition d'un non terminal syntaxique. */
/****************************************************************/
/*-------------------------------------------------------------*/
/* Heritage des proprietes d'Objet. */
/*-------------------------------------------------------------*/
Prive :
EstInstanceDe : Type Lecture Public;
/*-------------------------------------------------------------*/
/* Methodes propres. */
/*-------------------------------------------------------------*/
Prive :
Libelle : Caractere Trace;
Analyseur : Nul Ou AnalyseurSyntaxique Lecture Public Trace;
EstParametre : Booleen Lecture Public;
EstOptionnel : Booleen Lecture Public;
/*-------------------------------------------------------------*/
/* Heritage des methodes d'Objet. */
/*-------------------------------------------------------------*/
Public :
Fonction Optimiser(Invariant) Identique(O : Nul Ou Objet) Retourner Nul Ou Booleen;
Procedure Convertir(O : Nul Ou Objet);
Fonction Optimiser(Invariant) CreeParLeServeur() Retourner Entier;
Fonction Optimiser(Invariant) CreeParLeProcessus() Retourner Entier;
Fonction Optimiser(Invariant) CreeDansLEntrepot() Retourner Entrepot;
Fonction Cloner(EntrepotCible : Nul Ou Entrepot=Nul, Profondeur : ModeClonage = ClonageObjetSeul) Retourner Nul Ou Objet;
Fonction LirePropriete(NomPropriete : Caractere) Retourner Nul Ou Objet;
Procedure EcrirePropriete(NomPropriete : Caractere, Valeur : Nul Ou Objet);
Fonction IncrementerDecrementerPropriete(NomPropriete : Nul Ou Caractere, Incrementer : Booleen, Prefixe : Booleen) Retourner Nul Ou Objet;
Procedure SupprimerPropriete(NomPropriete : Caractere);
Fonction Optimiser(Invariant) EnumererProprietes(NumeroPropriete : Entier, TypePropriete : Nul Ou Type=? Sortie, PeutEtreNul : Booleen=? Sortie, Aide : Nul Ou Caractere=? Sortie, NomEnumere : Nul Ou Caractere=? Sortie) Retourner Nul Ou Caractere;
Fonction Optimiser(Invariant) Adresse() Retourner Nul Ou Caractere;
Prive :
Fonction Exporter(E : Nul Ou IEchangeElementaire) Retourner Boolean;
Fonction Importer(E : Nul Ou IEchangeElementaire, EntrepotCible : Nul Ou Entrepot=Nul, EstFiltre : Booleen=Faux, V : Entier=0, R : Entier=0, C : Entier=0) Retourner Nul Ou Objet;
/*-------------------------------------------------------------*/
/* Methodes propres. */
/*-------------------------------------------------------------*/
Public :
Constructeur Habilitation Optimiser(NulAbsorbant) (A : Nul Ou AnalyseurSyntaxique, L : Caractere, EP : Booleen, EO : Booleen,
ActionDefaut : Nul Ou Fonction(ValeurLexicale : Nul Ou Objet, ValeurSemantique : Nul Ou Objet, NumeroLigne : Entier, NumeroColonne : Entier) Retourner ActionEtapeReponse=Nul);
Operateur Optimiser(Invariant, NulAbsorbant) ==(N : Nul Ou NonTerminalSyntaxique) Retourner Nul Ou Booleen;
Operateur Optimiser(Invariant, NulAbsorbant) !=(N : Nul Ou NonTerminalSyntaxique) Retourner Nul Ou Booleen;
Prive :
Destructeur(MettreEnAnteMemoire : Booleen) Retourner Booleen;
Fin Type
Le type NonTerminalSyntaxique modélise un non-terminal syntaxique. Un non-terminal peut être vu comme le résultat de l'application d'une règle syntaxique. Nous disons qu'il se dérive en une ou plusieurs règles syntaxiques qui sont disjointes. Un non-terminal peut être récurrent, telle celui définissant une expression.
Le type NonTerminalSyntaxique possède un constructeur explicite dont les paramètres A et L représentent respectivement l'analyseur syntaxique de rattachement et le libellé du non-terminal.
Le paramètre EP doit avoir pour valeur Vrai si le non-terminal est paramétré.
Le paramètre EO doit avoir pour valeur Vrai si le non-terminal est optionnel.
La fonction de rappel optionnelle ActionSiOptionnelle se déclenche si le non-terminal optionnel n'est pas dérivé dans une règle. Voici ses paramètres :
Variable
/******/
MonAnalyseurSyntaxique : Nul Ou AnalyseurSyntaxique;
MonNonTerminalSyntaxiqueA : Nul Ou NonTerminalSyntaxique;
MonNonTerminalSyntaxiqueB : Nul Ou NonTerminalSyntaxique;
/****************************************************************/
Fonction ActionSiOptionnel(ValeurLexicale : Nul Ou Objet, ValeurSemantique : Nul Ou Objet, NumeroLigne : Entier, NumeroColonne : Entier) Retourner ActionEtapeReponse
/* Objet : Traite une action suite a une etape optionnelle. */
/****************************************************************/
Debut
...
Fin Fonction
Principal
/*******/
Debut
...
MonNonTerminalSyntaxiqueA=NonTerminalSyntaxique(MonAnalyseurSyntaxique, _T("MonNonTerminalSyntaxique"), ActionSiOptionnel);
...
Si MonNonTerminalSyntaxiqueA==MonNonTerminalSyntaxiqueB Alors
/* Egalité entre deux non-terminaux syntaxiques. */
...
Fin Si
Si MonNonTerminalSyntaxiqueA!=MonNonTerminalSyntaxiqueB Alors
/* Inégalité entre deux non-terminaux syntaxiques. */
...
Fin Si
- | - | - | - | - | - | - | - | - |