18/05/05se info2 - s. l'haire unige1 lecture cha î ne caract è res un document html est...

16
18/05/05 SE Info2 - S. L'haire UN IGE 1 Lecture chaîne caractères Un document HTML est composé de balises Une balise est composée de caractères entre <> (ex: <HTML> A chaque balise correspond une balise fermante (ex: </HTML> Lire et valider un document HTML bien formé Si même nombre de balises ouvrantes et fermantes même niveau

Upload: didiane-le-bris

Post on 04-Apr-2015

104 views

Category:

Documents


1 download

TRANSCRIPT

Page 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

18/05/05 SE Info2 - S. L'haire UNIGE 1

Lecture chaîne caractères Un document HTML est composé de balises Une balise est composée de caractères

entre <> (ex: <HTML> A chaque balise correspond une balise

fermante (ex: </HTML> Lire et valider un document HTML bien

formé Si même nombre de balises ouvrantes et

fermantes même niveau

Page 2: 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

18/05/05 SE Info2 - S. L'haire UNIGE 2

Un document à valider

<HTML><BODY>

<H4>Je suis un document</H4></BODY>

</HTML>

Page 3: 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

18/05/05 SE Info2 - S. L'haire UNIGE 3

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

Page 4: 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

18/05/05 SE Info2 - S. L'haire UNIGE 4

Automate simplifié pour le HTML Vocabulaire:

< > / espace autres (any car)

Etats e0, e1, e2, e3, e4

Etat initial e0 Etat final e4

<HTML><BODY>

<H4>Je suis un document</H4></BODY>

</HTML>

Page 5: 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

18/05/05 SE Info2 - S. L'haire UNIGE 5

Transitions pour le HTML

e0e4

<HTML><BODY>

<H4>Je suis un document</H4></BODY>

</HTML>

e1

e2

<

any carespace

e3

/

>any car

any car

any car

any car+ espace

<

Page 6: 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

18/05/05 SE Info2 - S. L'haire UNIGE 6

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

Page 7: 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

18/05/05 SE Info2 - S. L'haire UNIGE 7

Objet automateTransitionsTab = POINTER TO ARRAY OF ARRAY OF INTEGER;

Automate* = POINTER TO ABSTRACT RECORDtabTrans : TransitionsTab;etatPrecedent, etatCourant, nbEtats,nbSymboles, numSymbole : INTEGER;finalStates: SET;

END; Pour plus de comodités, les différents symboles reçoivent un

numéro (< = 1; / = 2; > = 3; espace = 4; autres cars = 0) Un nombre élevé (1000) fait office d'état d'échec

Page 8: 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

18/05/05 SE Info2 - S. L'haire UNIGE 8

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

Page 9: 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

18/05/05 SE Info2 - S. L'haire UNIGE 9

Initialisation Au niveau objet génériquePROCEDURE (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 DOa.tabTrans[i,j] := errorTrans;

END;END;

END Initialiser;

Page 10: 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

18/05/05 SE Info2 - S. L'haire UNIGE 10

Effectuer une transition Niveau génériquePROCEDURE (a: Automate) EffectuerTransition*(symbole :

CHAR): BOOLEAN, NEW;VAR numSymbole : INTEGER;

BEGINa.SetNumSymbole(a.LireSymbole(symbole));a.etatPrecedent := a.etatCourant;a.etatCourant :=

a.tabTrans[a.etatCourant, a.numSymbole];IF (a.etatCourant # errorTrans) THEN RETURN TRUEELSE RETURN FALSE END;

END EffectuerTransition;

Page 11: 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

18/05/05 SE Info2 - S. L'haire UNIGE 11

Au niveau spécifique

AutomateHTML* = POINTER TO RECORD (LhaireInfo2Automates.Automate)

niveau : INTEGER;indBalise : INTEGER;

balise* : ARRAY 100 OF CHAR;END;

Page 12: 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

18/05/05 SE Info2 - S. L'haire UNIGE 12

Lecture d'un symbole Niveau spécifiquePROCEDURE (a: AutomateHTML)LireSymbole*(s:

CHAR):INTEGER;BEGIN

CASE s OF '<' : RETURN 1;| '/' : RETURN 2;| '>' : RETURN 3;| ' ' : RETURN 4;ELSERETURN 0END;

END LireSymbole;

Page 13: 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

18/05/05 SE Info2 - S. L'haire UNIGE 13

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); …

Page 14: 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

18/05/05 SE Info2 - S. L'haire UNIGE 14

Effectuer une action Niveau spécifiquePROCEDURE (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; …

Page 15: 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

18/05/05 SE Info2 - S. L'haire UNIGE 15

Lecture de chaînePROCEDURE (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);

ENDEND;IF (a.EtatFinal()) & (a.niveau =0) THEN

StdLog.String("Succès lecture"); StdLog.LnELSE HALT(33) END;

END LireChaine;

Page 16: 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

18/05/05 SE Info2 - S. L'haire UNIGE 16

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