/****************************************************************/
Type RegleSyntaxique Defaut Final TailleSegment 32
/* Objet : Definition d'une regle syntaxique. */
/****************************************************************/
/*-------------------------------------------------------------*/
/* Heritage des proprietes d'Objet. */
/*-------------------------------------------------------------*/
Prive :
EstInstanceDe : Type Lecture Public;
/*-------------------------------------------------------------*/
/* Proprietes propres. */
/*-------------------------------------------------------------*/
Prive :
Analyseur : Nul Ou AnalyseurSyntaxique Lecture Public Trace;
NonTerminal : Nul Ou NonTerminalSyntaxique Lecture Public Trace;
Numero : Entier Lecture Public Trace;
/*-------------------------------------------------------------*/
/* 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, N : Nul Ou NonTerminalSyntaxique,
ActionReprise : Nul Ou Fonction(ValeurLexicale : Nul Ou Objet, ValeurSemantique : Nul Ou Objet, NumeroLigne : Entier, NumeroColonne : Entier) Retourner ActionEtapeReponse=Nul);
Operateur Optimiser(Invariant, NulAbsorbant) ==(R : Nul Ou RegleSyntaxique) Retourner Nul Ou Booleen;
Operateur Optimiser(Invariant, NulAbsorbant) !=(R : Nul Ou RegleSyntaxique) Retourner Nul Ou Booleen;
Procedure AjouterEtape(Identifiant : Entier,
ActionEtape : Nul Ou Fonction(ValeurLexicale : Nul Ou Objet, ValeurSemantique : Nul Ou Objet, NumeroLigne : Entier, NumeroColonne : Entier) Retourner ActionEtapeReponse=Nul,
ActionParametreEtape : Nul Ou Fonction(ValeurLexicale : Nul Ou Objet, ValeurParametre : Nul Ou Objet, NumeroLigne : Entier, NumeroColonne : Entier) Retourner ActionEtapeReponse=Nul);
Procedure Optimiser(NulAbsorbant) AjouterEtape(NT : Nul Ou NonTerminalSyntaxique,
ActionEtape : Nul Ou Fonction(ValeurLexicale : Nul Ou Objet, ValeurSemantique : Nul Ou Objet, NumeroLigne : Entier, NumeroColonne : Entier) Retourner ActionEtapeReponse=Nul,
ActionParametreEtape : Nul Ou Fonction(ValeurLexicale : Nul Ou Objet, ValeurParametre : Nul Ou Objet, NumeroLigne : Entier, NumeroColonne : Entier) Retourner ActionEtapeReponse=Nul);
Procedure Optimiser(NulAbsorbant) AjouterEtape(Libelle : Nul Ou Caractere,
ActionEtape : Nul Ou Fonction(ValeurLexicale : Nul Ou Objet, ValeurSemantique : Nul Ou Objet, NumeroLigne : Entier, NumeroColonne : Entier) Retourner ActionEtapeReponse=Nul,
ActionParametreEtape : Nul Ou Fonction(ValeurLexicale : Nul Ou Objet, ValeurParametre : Nul Ou Objet, NumeroLigne : Entier, NumeroColonne : Entier) Retourner ActionEtapeReponse=Nul);
Procedure ChangerEtat(Etat : Booleen);
Procedure ChangerPriorite(Priorite : Entier);
Prive :
Destructeur(MettreEnAnteMemoire : Booleen) Retourner Booleen;
Fin Type
Le type RegleSyntaxique modélise une règle de syntaxique. Une règle syntaxique expanse un non-terminal en une succession d'étapes d'analyse.
Une étape peut être un élément lexical appelé encore terminal ou un non-terminal. Un non-terminal peut être vu comme le résultat de l'application d'une autre règle.
A chaque étape reconnue, le contexte syntaxique comporte :
Une règle peut être récurrente, telle celle participant à l'analyse d'une expression. Toutefois, deux règles ne peuvent être incluses l'une dans l'autre et le graphe des règles ne doit pas comporter des chemins ambigus. En ce cas, l'exception ActionSyntaxiqueImpossible est envoyée.
Le type RegleSyntaxique possède un constructeur explicite dont les paramètres A et N représentent respectivement l'analyseur syntaxique de rattachement et le non-terminal de rattachement. La fonction de rappel optionnelle ActionReprise permet de définir comment reprendre l'analyse en cas d'erreur de syntaxe. Voici ses paramètres :
La fonction de rappel ActionReprise n'est utile que pour les règles s'apparentant à des paranthèses i.e. se terminant par un terminal discriminant pour resynchroniser la lecture du fichier source sur celui-ci. Voici un exemple :
Expression : ( Expresssion )
Variable
/******/
MonAnalyseurSyntaxique : Nul Ou AnalyseurSyntaxique;
/****************************************************************/
MonNonTerminalSyntaxique : Nul Ou NonTerminalSyntaxique;
MaRegleSyntaxiqueA : Nul Ou RegleSyntaxique;
MaRegleSyntaxiqueB : Nul Ou RegleSyntaxique;
Fonction ActionReprise(ValeurLexicale : Nul Ou Objet, ValeurSemantique : Nul Ou Objet, NumeroLigne : Entier, NumeroColonne : Entier) Retourner ActionEtapeReponse
/* Objet : Action executee suite a une reprise. */
/****************************************************************/
Debut
...
Fin Fonction
Principal
/*******/
Debut
...
MaRegleSyntaxiqueA=RegleSyntaxique(MonAnalyseurSyntaxique, MonNonTerminalSyntaxique, ActionReprise);
...
Si MaRegleSyntaxiqueA==MaRegleSyntaxiqueB Alors
/* Egalité entre deux règles syntaxiques. */
...
Fin Si
Si MaRegleSyntaxiqueA!=MaRegleSyntaxiqueB Alors
/* Inégalité entre deux règles syntaxiques. */
...
Fin Si
- | - | - | - | - | - | - | - | - |