290 likes | 513 Views
Machines de Turing. Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) http://zegour.esi.dz/ email: d_zegour@esi.dz. Machines de Turing : Objectif.
E N D
Machines de Turing Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) http://zegour.esi.dz/ email: d_zegour@esi.dz
Machines de Turing : Objectif • On définit deux machines rudimentaires de Turing : machine-caractères et machine-nombres. Ces machines permettant l’initiation à l’algorithmique • Ces machines offrent les opérations suivantes : CREER_MCAR, LIRECAR, NBRCAR CREER_MNOMBRE, LIRENOMBRE, NBRNOMBRE • Sémantique des machines de Turing : Il s’agit de les transformer en des formes internes qui permettent de faciliter leur interprétation ou génération de code.
Sémantique des machines de Turing : Quadruplés Machine-caractères CREER_MCAR(M, [Chaine]), LIRECAR(M,Caractere), NBRCAR(M) A : pointeur TABOB vers l’objet machine-caractères B : pointeur dans TABOB vers la constante chaîne de caractères A : pointeur TABOB vers l’objet machine-caractères B : pointeur dans TABOB vers l’identificateur A : pointeur TABOB vers l’objet machine-caractères C : pointeur dans TABOB vers le résultat (‘Créer_mcar’, A, B, ) (‘Lirecar’, A, B, ) (‘Nbrcar’, A, ,C )
Sémantique des machines de Turing : Quadruplés Machine-nombres : CREER_MNOMBRE(M, [Exp1, Exp2, …]), LIRENOMBRE(M,Nombre), NBRNOMBRE(M) A : pointeur TABOB vers l’objet machine-nombres B : pointeur dans TABCOMP vers la liste des expressions C : Nombre d’expressions A : pointeur TABOB vers l’objet machine-nombres B : pointeur dans TABOB vers l’identificateur A : pointeur TABOB vers l’objet machine-nombres C : pointeur dans TABOB vers le résultat (‘Créer_mnombre’, A, B, C ) (‘Lirenombre’, A, B, ) (‘Nbrnombre’, A, ,C )
Machines de Turing : Déclarations Types dans {Entier, Booleen, Car, Chaine} Sep dans {:, Un, Une, Des} Cste constante numérique entière Chaîne chaîne de caractères Idf identificateur Opr dans { <, <=, >, >=, =, <> } Opa dans { +, -, Ou } Opm dans { *, /, Et } Sign dans {+, -} Tableau est synonyme de Vecteur Init_tableau est synonyme de Init_vecteur
Machines de Turing : Déclarations <Algo Z> [ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin [;] { ~<Act> | <Fonct>~ [;] }* <Act> ActionIdf [ ( <Li> ) ] [;] [ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin <Fonct> FonctionIdf( <Li> ): <Typ> [ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin <Ps> <S>;{ [~Soit|Soient~] <S>;}* <S> <Li>[Sep ~<Typ>|~Action|Fonction(<Typ>)~ ~] <Li> Idf {,Idf}*
Machines de Turing : Déclarations <Typ> Types | <Structsimple> | <Structcomplexe> | Tableau(<Lc>) [De~<Structsimple> | Types~ ] | <Structsimple> [Structure ](Types {, Types }*) <Structcomplexe> [Structure ]( ~ Types | Vecteur(Cste)De Types ~ {, ~ Types | Vecteur(Cste) De Types ~ }*) <Lc> Cste {, Cste}* Machine_car | Machine_nombre |
Machines de Turing : Instructions < Lis > < Inst > { ; < Inst > }* <Inst> Idf:= <Exp> | Lire(Idf {, Idf }* ) | Ecrire(<Exp> {,<Exp>}* ) | Tantque <Exp> [ : ] <Lis> Fintantque | Si <Exp> [:] <Lis> [Sinon <Lis>] Fsi | PourIdf:= <Exp>,<Exp> [, <Exp>][:] <Lis> Finpour | AppelIdf [(Exp {,<Exp>}*)] |
Machines de Turing : Instructions <Inst> ~ Init_vecteur | Init_struct | ~ (Idf ,[[ ~<Exp>|[[<Exp> {, <Exp>}*]] ~ {, ~<Exp>|[[<Exp> {, <Exp>}*]]~}* ]] ) | Aff_element( <Exp> [[ <Exp> {, <Exp> }* ]],<Exp> ) | Aff_struct(Idf, Cste, <Exp>) | Creer_mnombre Creer_mcar(Idf,[[ Chaine ]]) | ~Lirecar|Lirenombre~ (Idf, Idf)
Machines de Turing : Expressions <Exp> <Exps>[ Opr <Exps>] <Exps> [Sign] <Terme> { Opa <Terme> }* <Terme> <Facteur>{Opm <Facteur>}* <Facteur> Idf [(Exp {,<Exp>}*)] | Cste | ( <Exp>) | <Fonct> | Non <Facteur> | Vrai | Faux | Chaine <Fonct> Element( <Fonct> [[ <Exp> {, <Exp> }* ]]) | Struct( Idf, Cste) | ~Nbrcar|NbrNombre~ (Idf)
Sémantique des machines de Turing : Fonctions sémantiques <Typ> Machine_car | Machine_nombre Fonctions sémantiques et Descriptions à trouver Fx Description <Typ>
Sémantique des machines de Turing : Fonctions sémantiques <Inst> Creer_mnombre (Idf ,[[ ~<Exp>|[[<Exp> {, <Exp>}*]] ~ {, ~<Exp>|[[<Exp> {, <Exp>}*]]~}* ]] ) | Fonctions sémantiques et Descriptions à trouver Fx Description < Inst>
Sémantique des machines de Turing : Fonctions sémantiques <Inst> Creer_mcar(Idf,[[ Chaine ]]) Fonctions sémantiques et Descriptions à trouver Fx Description < Inst>
Sémantique des machines de Turing : Fonctions sémantiques <Inst> ~Lirecar|Lirenombre~ (Idf, Idf) Fonctions sémantiques et Descriptions à trouver Fx Description < Inst>
Sémantique des machines de Turing : Fonctions sémantiques <Fonction> ~Nbrcar|NbrNombre~ (Idf) Fonctions sémantiques et Descriptions à trouver Fx Description < Fonction>
Sémantique des machines-caractères : Exemple Soit mc une machine_car; c un car; compte un entier; debut creer_mcar(mc, ['abc df yhr.'] ); lirecar(mc, c); compte := 0; tq c <> '.' compte := compte + 1; lirecar(mc, c) ftq; ecrire(compte) fin 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 LONGZDD 5 9 TABOB TABTYP MCESB 10 11 TABCONS 'abc df yhr.‘,’0’,’.’,’1’ Quadruplés générés 0 1 2 3 TABCOMP 0 2
Sémantique des machines-nombres : Exemple Soit mn une machine_nombre; n un entier; somme un entier; i un entier; debut creer_mnombre(mn, [12,54,67,11,23] ); somme := 0; pour i:=1, nbrnombre(mn) lirenombre(mn, n); somme := somme + n; fpour; ecrire(somme) fin 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 ‘12’,’54’,’67’,’11’,’23’,’0’,’1’ 9 9 0 1 2 3 4 5 6 10 10 TABCONS 11 11 LONGZDD 6 Quadruplés générés 12 TABTYP MNEB 13 TABCOMP 0 4,5,6,7,8 TABOB 1 2
Machines de Turing : Interprétation Implémentation de la Machine-Caractères (Description PASCAL) TYPE Typemcar = ^Elementmcar; Elementmcar = RECORD Adrchaine : Typechaine ; Nombre : INTEGER; Indice_courant : INTEGER END;
Machines de Turing : Interprétation Implémentation de la Machine-nombres (Description PASCAL) TYPE Typemnombre = ^Elementmnombre; Elementmnombre = RECORD Adrvect : POINTER ; Nombre : INTEGER; Indice_courant : INTEGER END;