Lecture chane caractres n n Un document HTML

  • Slides: 16
Download presentation
Lecture chaîne caractères n n Un document HTML est composé de balises Une balise

Lecture chaîne caractères n n 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é n 18/05/05 Si même nombre de balises ouvrantes et fermantes même niveau SE Info 2 - S. L'haire UNIGE 1

Un document à valider <HTML> <BODY> <H 4>Je suis un document</H 4> </BODY> </HTML>

Un document à valider <HTML> <BODY> <H 4>Je suis un document</H 4> </BODY> </HTML> 18/05/05 SE Info 2 - S. L'haire UNIGE 2

Technique des automates n n Automates à états finis: un algorithme simple de traitement

Technique des automates n n Automates à états finis: un algorithme simple de traitement de chaines Processus de traitement avec n n n Un vocabulaire de symboles finis (p. ex. des caractères ou groupes de caractères) Un ensemble d'états (e 0, e 1… en) Un ensemble de transitions d'un état à un autre étant donné la lecture d'un symbole n n 18/05/05 transition(symbole, état) = nouvel état A chaque transition, on peut associer des actions Un état initial (par convention e 0) Un ou plusieurs états finaux SE Info 2 - S. L'haire UNIGE 3

Automate simplifié pour le HTML n Vocabulaire: n n n n < > /

Automate simplifié pour le HTML n Vocabulaire: n n n n < > / espace autres (any car) Etats e 0, e 1, e 2, e 3, e 4 Etat initial e 0 Etat final e 4 18/05/05 <HTML> <BODY> <H 4>Je suis un document</H 4> </BODY> </HTML> SE Info 2 - S. L'haire UNIGE 4

Transitions pour le HTML any car espace e 0 < any car e 3

Transitions pour le HTML any car espace e 0 < any car e 3 e 1 / any car e 2 > e 4 < any car + espace <HTML> <BODY> <H 4>Je suis un document</H 4> </BODY> </HTML> 18/05/05 SE Info 2 - S. L'haire UNIGE 5

Actions n n But: placer la balise lue dans une chaîne et changer de

Actions n n But: placer la balise lue dans une chaîne et changer de niveaux Actions liées à l'état courant et état précédent n Si e 3 on ajoute un caractère à la balise n n 18/05/05 Si on était en e 1 on ajoute un niveau Si on était en e 2 on enlève un niveau Si e 4 on ferme chaîne balise, on met indice à 0 et on écrit Dans tous les autres cas on ne fait rien SE Info 2 - S. L'haire UNIGE 6

Objet automate Transitions. Tab = POINTER TO ARRAY OF INTEGER; Automate* = POINTER TO

Objet automate Transitions. Tab = POINTER TO ARRAY OF INTEGER; Automate* = POINTER TO ABSTRACT RECORD tab. Trans : Transitions. Tab; etat. Precedent, etat. Courant, nb. Etats, nb. Symboles, num. Symbole : INTEGER; final. States: SET; END; n Pour plus de comodités, les différents symboles reçoivent un numéro (< = 1; / = 2; > = 3; espace = 4; autres cars = 0) n Un nombre élevé (1000) fait office d'état d'échec 18/05/05 SE Info 2 - S. L'haire UNIGE 7

Objet (suite) n (a: (a: (a: Des méthodes permettent d'accéder aux propriétés privées Automate)

Objet (suite) n (a: (a: (a: Des méthodes permettent d'accéder aux propriétés privées Automate) Automate) Automate) 18/05/05 Etat. Final (): BOOLEAN, NEW; Get. Current. State (): INTEGER, NEW; Get. Etat. Courant (): INTEGER, NEW; Get. Nb. Etats (): INTEGER, NEW; Get. Nb. Symboles (): INTEGER, NEW; Get. Num. Symbole (): INTEGER, NEW; Get. Prev. State (): INTEGER, NEW; Set. Num. Symbole (num: INTEGER), NEW; Set. Trans (state, sym, newstate: INTEGER), NEW SE Info 2 - S. L'haire UNIGE 8

Initialisation Au niveau objet générique n PROCEDURE (a: Automate)Initialiser*(nb. Etats, nb. Symboles : INTEGER;

Initialisation Au niveau objet générique n PROCEDURE (a: Automate)Initialiser*(nb. Etats, nb. Symboles : INTEGER; finis : SET), NEW; VAR i, j : INTEGER; BEGIN ASSERT(finis # {}); ASSERT(nb. Etats > 1); ASSERT(nb. Symboles > 1); a. final. States : = finis; a. nb. Etats : = nb. Etats; a. nb. Symboles : = nb. Symboles; a. etat. Courant : = 0; a. etat. Precedent : = 0; NEW(a. tab. Trans, nb. Etats, nb. Symboles); FOR i : = 0 TO nb. Etats -1 DO FOR j : = 0 TO nb. Symboles -1 DO a. tab. Trans[i, j] : = error. Trans; END; END Initialiser; 18/05/05 SE Info 2 - S. L'haire UNIGE 9

Effectuer une transition n Niveau générique PROCEDURE (a: Automate) Effectuer. Transition*(symbole : CHAR): BOOLEAN,

Effectuer une transition n Niveau générique PROCEDURE (a: Automate) Effectuer. Transition*(symbole : CHAR): BOOLEAN, NEW; VAR num. Symbole : INTEGER; BEGIN a. Set. Num. Symbole(a. Lire. Symbole(symbole)); a. etat. Precedent : = a. etat. Courant; a. etat. Courant : = a. tab. Trans[a. etat. Courant, a. num. Symbole]; IF (a. etat. Courant # error. Trans) THEN RETURN TRUE ELSE RETURN FALSE END; END Effectuer. Transition; 18/05/05 SE Info 2 - S. L'haire UNIGE 10

Au niveau spécifique Automate. HTML* = POINTER TO RECORD (Lhaire. Info 2 Automates. Automate)

Au niveau spécifique Automate. HTML* = POINTER TO RECORD (Lhaire. Info 2 Automates. Automate) niveau : INTEGER; ind. Balise : INTEGER; balise* : ARRAY 100 OF CHAR; END; 18/05/05 SE Info 2 - S. L'haire UNIGE 11

Lecture d'un symbole n Niveau spécifique PROCEDURE (a: Automate. HTML)Lire. Symbole*(s: CHAR): INTEGER; BEGIN

Lecture d'un symbole n Niveau spécifique PROCEDURE (a: Automate. HTML)Lire. Symbole*(s: CHAR): INTEGER; BEGIN CASE s OF '<' : RETURN 1; | '/' : RETURN 2; | '>' : RETURN 3; | ' ' : RETURN 4; ELSE RETURN 0 END; END Lire. Symbole; 18/05/05 SE Info 2 - S. L'haire UNIGE 12

Initialiser les transitions n n n Au niveau spécifique Le tableau des transitions est

Initialiser les transitions n n n 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: Automate. HTML)Initialiser. Trans*; BEGIN a. Set. Trans(0, 0, 0); a. Set. Trans(0, 1, 1); a. Set. Trans(0, 4, 0); … 18/05/05 SE Info 2 - S. L'haire UNIGE 13

Effectuer une action n Niveau spécifique PROCEDURE (a: Automate. HTML) Effectuer. Action* (symbole: CHAR):

Effectuer une action n Niveau spécifique PROCEDURE (a: Automate. HTML) Effectuer. Action* (symbole: CHAR): BOOLEAN; BEGIN CASE a. Get. Current. State() OF 0 : RETURN TRUE; | 1 : RETURN TRUE; | 2 : RETURN TRUE; | 3 : a. balise[a. ind. Balise] : = symbole; INC(a. ind. Balise); IF a. Get. Prev. State() = 1 THENINC(a. niveau); ELSIF a. Get. Prev. State() = 2 THEN DEC(a. niveau); END; RETURN TRUE; | 4: a. balise[a. ind. Balise] : = 0 X; a. ind. Balise : = 0; … 18/05/05 SE Info 2 - S. L'haire UNIGE 14

Lecture de chaîne PROCEDURE (a: Automate. HTML) Lire. Chaine(IN chaine : ARRAY OF CHAR),

Lecture de chaîne PROCEDURE (a: Automate. HTML) Lire. Chaine(IN chaine : ARRAY OF CHAR), NEW; VAR i : INTEGER; BEGIN i: = 0; WHILE (chaine[i] # 0 X) & (a. Effectuer. Transition(chaine[i])) DO IF a. Effectuer. Action(chaine[i]) THEN écrire log… INC(i); END; IF (a. Etat. Final()) & (a. niveau =0) THEN Std. Log. String("Succès lecture"); Std. Log. Ln ELSE HALT(33) END; END Lire. Chaine; 18/05/05 SE Info 2 - S. L'haire UNIGE 15

Pour le TP 10 n n Plus simple de construire un élément du graphe

Pour le TP 10 n n Plus simple de construire un élément du graphe par un automate Le vocabulaire des automates est n n n espace délimiteurs: ! " ( ) , . - : ; [ ] < > apostrophe caractères alphanumériques sinon erreur Vous pouvez réutiliser le code de l'exemple 18/05/05 SE Info 2 - S. L'haire UNIGE 16