/****************************************************************/
Type AnalyseurSyntaxique Defaut Final TailleSegment 2
/* Objet : Definition d'un analyseur syntaxique. */
/****************************************************************/
/*-------------------------------------------------------------*/
/* Heritage des proprietes d'Objet. */
/*-------------------------------------------------------------*/
Prive :
EstInstanceDe : Type Lecture Public;
/*-------------------------------------------------------------*/
/* Proprietes propres. */
/*-------------------------------------------------------------*/
Prive :
NomAnalyseur : Caractere 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) (Nom : Nul Ou Caractere,
ChercherIdentificateur : Nul Ou Fonction(Identifiant : Entier, PremiereFois : Booleen) Retourner Nul Ou Caractere=Nul,
CorrigerErreur : Nul Ou Fonction(NomFichierSource : Caractere, NumeroLigne : Entier, NumeroColonne : Entier, Action : ActionCorrection, Taille : Entier, Libelle : Caractere) Retourner ActionEtapeReponse=Nul);
Operateur Optimiser(Invariant, NulAbsorbant) ==(A : Nul Ou AnalyseurSyntaxique) Retourner Nul Ou Booleen;
Operateur Optimiser(Invariant, NulAbsorbant) !=(A : Nul Ou AnalyseurSyntaxique) Retourner Nul Ou Booleen;
Procedure Optimiser(NulAbsorbant) DebuterAnalyse(AL : Nul Ou AnalyseurLexical, AS : Nul Ou Objet=Nul, TaillePileMax : Entier=1024, ConserverCommentaires : Booleen=Faux);
Fonction Optimiser(NulAbsorbant) Analyser(NonTerminalRacine : Nul Ou NonTerminalSyntaxique, ContinuerSiErreurSyntaxe : Booleen,
EnvoyerErreur : Nul Ou Procedure(MessageErreur : Caractere, NomFichierSource : Caractere, NumeroLigne : Entier, NumeroColonne : Entier)=Nul,
ArreterAnalyseAvantLaFin : Booleen=Faux) Retourner Booleen;
Procedure TerminerAnalyse();
Fonction LireSymboleLexical(NumeroEtape : Entier) Retourner Nul Ou Objet;
Fonction LireValeurLexicale(NumeroEtape : Entier) Retourner Nul Ou Objet;
Fonction LireValeurSemantique(NumeroEtape : Entier) Retourner Nul Ou Objet;
Procedure FixerValeurSemantique(ValeurSemantique : Nul Ou Objet);
Procedure LireLigneColonneSource(Decalage : Entier, NomFichierSource : Nul Ou Caractere Sortie, NumeroLigne : Entier Sortie, NumeroColonne : Entier Sortie);
Fonction NbErreursDeSyntaxe() Retourner Entier;
Procedure EnvoyerErreur(MessageDErreur : Caractere, NomFichierSource : Caractere, NumeroLigne : Entier, NumeroColonne : Entier);
Fonction LireCommentaire() Retourner Nul Ou ListeDe Caractere;
Procedure Optimiser(NulAbsorbant) EcrireCommentaire(Commentaire : Nul Ou ListeDe Caractere);
Prive :
Destructeur(MettreEnAnteMemoire : Booleen) Retourner Booleen;
Fin Type
Le type AnalyseurSyntaxique modélise un analyseur syntaxique i.e. un automate reconnaissant un enchaînement d'éléments lexicaux à partir d'une grammaire de règles de syntaxe dérivant des non-terminaux.
Le type AnalyseurSyntaxique possède un constructeur explicite dont le paramètre Nom représente le nom de l'analyseur ainsi que deux fonctions de rappel optionnelles :
Deux tâches ne peuvent utiliser simultanément un analyseur syntaxique. Les accès sont sérialisés par l'usage d'une synchronisation.
Variable
/******/
MonAnalyseurSyntaxiqueA : Nul Ou AnalyseurSyntaxique;
MonAnalyseurSyntaxiqueB : Nul Ou AnalyseurSyntaxique;
/****************************************************************/
Fonction ChercherIdentificateur(Identifiant : Entier, PremiereFois : Booleen) Retourner Nul Ou Caractere
/* Objet : Cherche un identifiant. */
/****************************************************************/
Debut
...
Fin Fonction
/****************************************************************/
Fonction CorrigerErreur(NomFichierSource : Caractere, NumeroLigne : Entier, NumeroColonne : Entier, Action : ActionCorrection, Taille : Entier, Libelle : Caractere) Retourner ActionEtapeReponse
/* Objet : Corrige une erreur. */
/****************************************************************/
Debut
...
Fin Fonction
Principal
/*******/
Debut
...
MonAnalyseurSyntaxiqueA=AnalyseurSyntaxique("MonAnalyseurSyntaxique", ChercherIdentificateur, CorrigerErreur);
...
Si MonAnalyseurSyntaxiqueA==MonAnalyseurSyntaxiqueB Alors
/* Egalité entre deux analyseurs syntaxiques. */
...
Fin Si
Si MonAnalyseurSyntaxiqueA!=MonAnalyseurSyntaxiqueB Alors
/* Inégalité entre deux analyseurs syntaxiques. */
...
Fin Si
- | - | - | - | - | - | - | - | - |