Machines de Turing Pr ZEGOUR DJAMEL EDDINE Ecole

  • Slides: 19
Download presentation
Machines de Turing Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) http: //zegour. esi.

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 n On définit deux machines rudimentaires de Turing :

Machines de Turing : Objectif n On définit deux machines rudimentaires de Turing : machine-caractères et machine-nombres. Ces machines permettant l’initiation à l’algorithmique n Ces machines offrent les opérations suivantes : CREER_MCAR, LIRECAR, NBRCAR CREER_MNOMBRE, LIRENOMBRE, NBRNOMBRE n 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) (‘Créer_mcar’,

Sémantique des machines de Turing : Quadruplés Machine-caractères CREER_MCAR(M, [Chaine]), LIRECAR(M, Caractere), NBRCAR(M) (‘Créer_mcar’, A, B, ) A : pointeur TABOB vers l’objet machine-caractères B : pointeur dans TABOB vers la constante chaîne de caractères (‘Lirecar’, A, B, ) A : pointeur TABOB vers l’objet machine-caractères B : pointeur dans TABOB vers l’identificateur (‘Nbrcar’, A, , C ) A : pointeur TABOB vers l’objet machine-caractères C : pointeur dans TABOB vers le résultat

Sémantique des machines de Turing : Quadruplés Machine-nombres : CREER_MNOMBRE(M, [Exp 1, Exp 2,

Sémantique des machines de Turing : Quadruplés Machine-nombres : CREER_MNOMBRE(M, [Exp 1, Exp 2, …]), LIRENOMBRE(M, Nombre), NBRNOMBRE(M) (‘Créer_mnombre’, A, B, C ) A : pointeur TABOB vers l’objet machine-nombres B : pointeur dans TABCOMP vers la liste des expressions C : Nombre d’expressions (‘Lirenombre’, A, B, ) A : pointeur TABOB vers l’objet machine-nombres B : pointeur dans TABOB vers l’identificateur (‘Nbrnombre’, A, , C ) A : pointeur TABOB vers l’objet machine-nombres C : pointeur dans TABOB vers le résultat

Machines de Turing : Déclarations Types dans {Entier, Booleen, Car, Chaine} Sep dans {:

Machines de Turing : Déclarations Types dans {Entier, Booleen, Car, Chaine} Sep dans {: , 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> <Act> <Fonct> <Ps> <S> <Li> [ ~Soit|Soient~

Machines de Turing : Déclarations <Algo Z> <Act> <Fonct> <Ps> <S> <Li> [ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin [; ] { ~<Act> | <Fonct>~ [; ] }* Action Idf [ ( <Li> ) ] [; ] [ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin Fonction Idf ( <Li> ) : <Typ> [ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin <S>; { [~Soit|Soient~] <S>; }* <Li>[Sep ~<Typ>|~Action|Fonction(<Typ>)~ ~] Idf {, Idf}*

Machines de Turing : Déclarations <Typ> Types | <Structsimple> | <Structcomplexe> | Machine_car |

Machines de Turing : Déclarations <Typ> Types | <Structsimple> | <Structcomplexe> | Machine_car | Machine_nombre | Tableau (<Lc>) [De~<Structsimple> | Types~ ] | <Structsimple> [Structure ](Types {, Types }*) <Structcomplexe> [Structure ]( ~ Types | Vecteur(Cste) De Types ~ {, ~ Types | Vecteur(Cste) De Types ~ }*) <Lc> Cste {, Cste}*

Machines de Turing : Instructions < Lis > <Inst> < Inst > { ;

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 | Pour Idf: = <Exp>, <Exp> [, <Exp>][: ] <Lis> Finpour | Appel Idf [(Exp {, <Exp>}*)] |

Machines de Turing : Instructions <Inst> ~ Init_vecteur | Init_struct | ~ Creer_mnombre (

Machines de Turing : Instructions <Inst> ~ Init_vecteur | Init_struct | ~ Creer_mnombre ( Idf , [[ ~<Exp>|[[<Exp> {, <Exp>}*]] ~ {, ~<Exp>|[[<Exp> {, <Exp>}*]]~}* ]] ) | Aff_element ( <Exp> [[ <Exp> {, <Exp> }* ]] , <Exp> ) | Aff_struct(Idf, Cste, <Exp>) | Creer_mcar(Idf, [[ Chaine ]]) | ~Lirecar|Lirenombre~ (Idf, Idf)

Machines de Turing : Expressions <Exp> <Exps> <Terme> <Facteur> <Fonct> <Exps>[ Opr <Exps>] [Sign]

Machines de Turing : Expressions <Exp> <Exps> <Terme> <Facteur> <Fonct> <Exps>[ Opr <Exps>] [Sign] <Terme> { Opa <Terme> }* <Facteur>{Opm <Facteur>}* Idf [(Exp {, <Exp>}*)] | Cste | ( <Exp>) | <Fonct> | Non <Facteur> | Vrai | Faux | Chaine Element ( <Fonct> [[ <Exp> {, <Exp> }* ]] ) | Struct ( Idf, Cste) | ~Nbrcar|Nbr. Nombre~ (Idf)

Sémantique des machines de Turing : Fonctions sémantiques <Typ> Machine_car | Machine_nombre Fonctions sémantiques

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 , [[

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é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

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|Nbr. Nombre~ (Idf) Fonctions sémantiques

Sémantique des machines de Turing : Fonctions sémantiques <Fonction> ~Nbrcar|Nbr. Nombre~ (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

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 LONGZDD 5 0 ‘Dc’ 1 0 ‘L’ 1 2 0 1 ‘De’ 2 1 ‘L’ 2 1 1 2 ‘Creer’ 0 3 2 ‘L’ 3 1 2 3 ‘Lirec’ 0 1 3 ‘C’ 2 1 0 4 ‘Aff’ 2 4 4 ‘C’ 2 1 1 5 ‘<>’ 1 5 6 5 ‘C’ 2 1 2 6 ‘B’ 6 7 11 6 ‘X’ 5 1 3 7 ‘+E’ 2 7 8 7 ‘C’ 4 1 3 8 ‘Aff’ 2 8 8 ‘X’ 3 1 4 0 MCESB 9 ‘Lirec’ 10 ‘Br’ TABCONS 'abc df yhr. ‘, ’ 0’, ’ 1’ 11 ‘Ecrire’ 0 TABTYP 0 TABCOMP 0 1 2 3 2 1 5 1 Quadruplés générés TABOB

Sémantique des machines-nombres : Exemple Soit mn une machine_nombre; n un entier; somme un

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 ‘Creer’ 0 1 ‘Aff’ 2 5 0 ‘L’ 1 2 0 2 9 1 ‘L’ 3 1 1 ‘: =’ 3 10 2 ‘L’ 3 1 2 3 ‘Nbrno’ 0 11 3 ‘L’ 3 1 3 4 ‘<=’ 3 11 12 4 ‘C’ 3 1 0 5 ‘B’ 12 6 11 5 ‘C’ 3 1 1 6 ‘Lireno’ 0 1 6 ‘C’ 3 1 2 7 ‘+E’ 2 1 13 7 ‘C’ 3 1 3 8 ‘Aff’ 2 13 8 ‘C’ 3 1 4 ‘ 12’, ’ 54’, ’ 67’, ’ 11’, ’ 23’, ’ 0’, ’ 1’ 9 ‘+E’ 3 3 9 ‘C’ 3 1 5 0 1 2 TABCONS LONGZDD 10 ‘Br’ 4 10 ‘C’ 3 2 6 11 ‘Ecrire’ 1 11 ‘X’ 3 1 4 12 ‘X’ 4 1 5 13 ‘X’ 3 1 6 TABTYP 3 4 5 6 1 10 1 Quadruplés générés MNEB TABCOMP 0 6 0 4, 5, 6, 7, 8 2 TABOB

Machines de Turing : Interprétation Implémentation de la Machine-Caractères (Description PASCAL) TYPE Typemcar =

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 =

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;