Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parDidiane Le bris Modifié depuis plus de 10 années
1
18/05/05SE Info2 - S. L'haire UNIGE1 Lecture cha î ne caract è res Un document HTML est compos é de balises Une balise est compos é e de caract è res entre <> (ex: A chaque balise correspond une balise fermante (ex: Lire et valider un document HTML bien form é Si même nombre de balises ouvrantes et fermantes même niveau
2
18/05/05SE Info2 - S. L'haire UNIGE2 Un document à valider Je suis un document
3
18/05/05SE Info2 - S. L'haire UNIGE3 Technique des automates Automates à é tats finis: un algorithme simple de traitement de chaines Processus de traitement avec Un vocabulaire de symboles finis (p.ex. des caract è res ou groupes de caract è res) Un ensemble d' é tats (e0, e1 … en) Un ensemble de transitions d'un é tat à un autre é tant donn é la lecture d'un symbole transition(symbole, é tat) = nouvel é tat A chaque transition, on peut associer des actions Un é tat initial (par convention e0) Un ou plusieurs é tats finaux
4
18/05/05SE Info2 - S. L'haire UNIGE4 Automate simplifi é pour le HTML Vocabulaire: < > / espace autres (any car) Etats e0, e1, e2, e3, e4 Etat initial e0 Etat final e4 Je suis un document
5
18/05/05SE Info2 - S. L'haire UNIGE5 Transitions pour le HTML e0 e4 Je suis un document e1 e2 < any car espace e3 / > any car + espace <
6
18/05/05SE Info2 - S. L'haire UNIGE6 Actions But: placer la balise lue dans une cha î ne et changer de niveaux Actions li é es à l' é tat courant et é tat pr é c é dent Si e3 on ajoute un caract è re à la balise Si on é tait en e1 on ajoute un niveau Si on é tait en e2 on enl è ve un niveau Si e4 on ferme cha î ne balise, on met indice à 0 et on é crit Dans tous les autres cas on ne fait rien
7
18/05/05SE Info2 - S. L'haire UNIGE7 Objet automate TransitionsTab = POINTER TO ARRAY OF ARRAY OF INTEGER; Automate* = POINTER TO ABSTRACT RECORD tabTrans : TransitionsTab; etatPrecedent, etatCourant, nbEtats, nbSymboles, numSymbole : INTEGER; finalStates: SET; END; Pour plus de comodit é s, les diff é rents symboles re ç oivent un num é ro ( = 3; espace = 4; autres cars = 0) Un nombre é lev é (1000) fait office d' é tat d' é chec
8
18/05/05SE Info2 - S. L'haire UNIGE8 Objet (suite) Des m é thodes permettent d'acc é der aux propri é t é s priv é es (a: Automate) EtatFinal (): BOOLEAN, NEW; (a: Automate) GetCurrentState (): INTEGER, NEW; (a: Automate) GetEtatCourant (): INTEGER, NEW; (a: Automate) GetNbEtats (): INTEGER, NEW; (a: Automate) GetNbSymboles (): INTEGER, NEW; (a: Automate) GetNumSymbole (): INTEGER, NEW; (a: Automate) GetPrevState (): INTEGER, NEW; (a: Automate) SetNumSymbole (num: INTEGER), NEW; (a: Automate) SetTrans (state, sym, newstate: INTEGER), NEW
9
18/05/05SE Info2 - S. L'haire UNIGE9 Initialisation Au niveau objet g é n é rique PROCEDURE (a: Automate)Initialiser*(nbEtats, nbSymboles : INTEGER; finis : SET), NEW; VAR i, j : INTEGER; BEGIN ASSERT(finis # {}); ASSERT(nbEtats > 1); ASSERT(nbSymboles > 1); a.finalStates := finis; a.nbEtats := nbEtats; a.nbSymboles := nbSymboles; a.etatCourant := 0; a.etatPrecedent := 0; NEW(a.tabTrans, nbEtats, nbSymboles); FOR i := 0 TO nbEtats -1 DO FOR j := 0 TO nbSymboles -1 DO a.tabTrans[i,j] := errorTrans; END; END Initialiser;
10
18/05/05SE Info2 - S. L'haire UNIGE10 Effectuer une transition Niveau g é n é rique PROCEDURE (a: Automate) EffectuerTransition*(symbole : CHAR): BOOLEAN, NEW; VAR numSymbole : INTEGER; BEGIN a.SetNumSymbole(a.LireSymbole(symbole)); a.etatPrecedent := a.etatCourant; a.etatCourant := a.tabTrans[a.etatCourant, a.numSymbole]; IF (a.etatCourant # errorTrans) THEN RETURN TRUE ELSE RETURN FALSE END; END EffectuerTransition;
11
18/05/05SE Info2 - S. L'haire UNIGE11 Au niveau sp é cifique AutomateHTML* = POINTER TO RECORD (LhaireInfo2Automates.Automate) niveau : INTEGER; indBalise : INTEGER; balise* : ARRAY 100 OF CHAR; END;
12
18/05/05SE Info2 - S. L'haire UNIGE12 Lecture d'un symbole Niveau sp é cifique PROCEDURE (a: AutomateHTML)LireSymbole*(s: CHAR):INTEGER; BEGIN CASE s OF '<' : RETURN 1; | '/' : RETURN 2; | '>' : RETURN 3; | ' ' : RETURN 4; ELSE RETURN 0 END; END LireSymbole;
13
18/05/05SE Info2 - S. L'haire UNIGE13 Initialiser les transitions Au niveau sp é cifique Le tableau des transitions est initialis é à l' é tat "erreur" à la construction de l'objet (niveau g é n é rique) Il n'y a plus qu' à initialiser les é tats corrects au niveau sp é cifique PROCEDURE (a: AutomateHTML)InitialiserTrans*; BEGIN a.SetTrans(0, 0, 0); a.SetTrans(0, 1,1); a.SetTrans(0,4,0); …
14
18/05/05SE Info2 - S. L'haire UNIGE14 Effectuer une action Niveau sp é cifique PROCEDURE (a: AutomateHTML) EffectuerAction* (symbole: CHAR): BOOLEAN; BEGIN CASE a.GetCurrentState() OF 0 : RETURN TRUE; | 1 : RETURN TRUE; | 2 :RETURN TRUE; | 3 : a.balise[a.indBalise] := symbole; INC(a.indBalise); IF a.GetPrevState() = 1 THENINC(a.niveau); ELSIF a.GetPrevState() = 2 THEN DEC(a.niveau); END; RETURN TRUE; | 4: a.balise[a.indBalise] := 0X; a.indBalise := 0; …
15
18/05/05SE Info2 - S. L'haire UNIGE15 Lecture de cha î ne PROCEDURE (a: AutomateHTML) LireChaine(IN chaine : ARRAY OF CHAR), NEW; VAR i : INTEGER; BEGIN i:= 0; WHILE (chaine[i] # 0X) & (a.EffectuerTransition(chaine[i])) DO IF a.EffectuerAction(chaine[i]) THEN é crire log … INC(i); END END; IF (a.EtatFinal()) & (a.niveau =0) THEN StdLog.String("Succ è s lecture"); StdLog.Ln ELSE HALT(33) END; END LireChaine;
16
18/05/05SE Info2 - S. L'haire UNIGE16 Pour le TP 10 Plus simple de construire un é l é ment du graphe par un automate Le vocabulaire des automates est espace d é limiteurs: ! " ( ),.- : ; [ ] apostrophe caract è res alphanum é riques sinon erreur Vous pouvez r é utiliser le code de l'exemple
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.