1 / 29

Projet GENIE LOGICIEL

Réalisation d’un compilateur ADT’81 à TAD persistants. 19 Mai 2008. Projet GENIE LOGICIEL. IASIG promotion 2007 - 2008. Intéractions avec les autres équipes. Avec l’équipe 1: Requête pour un identificateur de module lors d’un appel et requête pour l’instruction « result »

cicely
Télécharger la présentation

Projet GENIE LOGICIEL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Réalisation d’un compilateur ADT’81 à TAD persistants 19 Mai 2008 Projet GENIE LOGICIEL IASIG promotion 2007 - 2008

  2. Intéractions avec les autres équipes Avec l’équipe 1: Requête pour un identificateur de module lors d’un appel et requête pour l’instruction « result » REQ_APPEL (nomexp, codeIE, adresse, message) REQ_RESULT (type, genre, mult, org, cla, spar, ls, cs) Avec l’équipe 2: Requête pour le traitement des expressions dans le cas général et dans le cas d’une affectation REQ_EQ2 (nomexp, adresse, ICE, type, genre, ls, cs) REQ_AFFEC (nomexp, adresse, vecteurDeMessages, ls, cs)

  3. 5 types d’instructions exécutables : • Instructions exécutables de base (boucles, tests, cases, parallèles, débranchements…) • Instructions de liste • Instructions TAD • Instructions processus g non traitées dans cette version du compilateur • Instructions d’entrée-sortie g non traitées dans cette version du compilateur Instructions Exécutables

  4. <boucle séquentielle> ::=loop@3010#[for <ident> @3020#:@3012# <eae> @3030#to@3013# <eae> @3031#[step <eae> @3032#]][while <exp bool> @3040#]do@3004# <lie boucle> [until <exp bool> @3041#]endloop@3050# loop for i : 1 to pos+1 step pas while a>b do … until bool endloop ; Boucles séquentielles Tâche 3010 : - empilement de LOOP dans la PILIE_ANX - insertion de LOOP et de la valeur de NTB dans la TIE - insertion de NTIE à adTB de la TB

  5. <boucle séquentielle> ::=loop@3010#[for <ident> @3020#:@3012# <eae> @3030#to@3013# <eae> @3031#[step <eae> @3032#]][while <exp bool> @3040#]do@3004# <lie boucle> [until <exp bool> @3041#]endloop@3050# loop for i : 1 to pos+1 step pas while a>b do … until bool endloop ; Boucles séquentielles Tâche 3020 : - vérifications sur le compteur de boucle - insertion de l’adresse du compteur dans adC de la TB

  6. <boucle séquentielle> ::=loop@3010#[for <ident> @3020#:@3012# <eae> @3030#to@3013# <eae> @3031#[step <eae> @3032#]][while <exp bool> @3040#]do@3004# <lie boucle> [until <exp bool> @3041#]endloop@3050# loop for i : 1 to pos+1 step pas while a>b do … until bool endloop ; Boucles séquentielles Tâches 3012, 3013, 3004 : - appel à GEST_ERR_SYN : automate de gestion des erreurs syntaxiques

  7. <boucle séquentielle> ::=loop@3010#[for <ident> @3020#:@3012# <eae> @3030#to@3013# <eae> @3031#[step <eae> @3032#]][while <exp bool> @3040#]do@3004# <lie boucle> [until <exp bool> @3041#]endloop@3050# loop for i : 1 to pos+1 step pas while a>b do … until bool endloop ; Boucles séquentielles Tâches 3030, 3031, 3032 : - vérification sur le type de l’expression arithmétique - remplissage de la TB avec l’adresse de l'expression + cas

  8. <boucle séquentielle> ::=loop@3010#[for <ident> @3020#:@3012# <eae> @3030#to@3013# <eae> @3031#[step <eae> @3032#]][while <exp bool> @3040#]do@3004# <lie boucle> [until <exp bool> @3041#]endloop@3050# loop for i : 1 to pos+1 step pas while a>b do … until bool endloop ; Boucles séquentielles Tâches 3040 : - vérification sur le type de l’expression + pas une constante - remplissage de la TB avec l’adresse de l'expression + cas

  9. <boucle séquentielle> ::=loop@3010#[for <ident> @3020#:@3012# <eae> @3030#to@3013# <eae> @3031#[step <eae> @3032#]][while <exp bool> @3040#]do@3004# <lie boucle> [until <exp bool> @3041#]endloop@3050# loop for i : 1 to pos+1 step pas while a>b do … until bool endloop ; Boucles séquentielles

  10. <boucle séquentielle> ::=loop@3010#[for <ident> @3020#:@3012# <eae> @3030#to@3013# <eae> @3031#[step <eae> @3032#]][while <exp bool> @3040#]do@3004# <lie boucle> [until <exp bool> @3041#]endloop@3050# loop for i : 1 to pos+1 step pas while a>b do … until bool endloop ; Boucles séquentielles Tâches 3041 : - vérification sur le type de l’expression + pas une constante - remplissage de la TB avec l’adresse de l'expression + cas

  11. <boucle séquentielle> ::=loop@3010#[for <ident> @3020#:@3012# <eae> @3030#to@3013# <eae> @3031#[step <eae> @3032#]][while <exp bool> @3040#]do@3004# <lie boucle> [until <exp bool> @3041#]endloop@3050# loop for i : 1 to pos+1 step pas while a>b do … until bool endloop ; Boucles séquentielles Tâche 3050 : - dépile PILIE_ANX - insertion de ENDLOOP et de l’adresse de la boucle dans la TIE - insertion de NTIE à adFB de la TB

  12. <boucle séquentielle> ::=loop@3010#[for <ident> @3020#:@3004# <eae> @3030#to@3004# <eae> @3031#[step <eae> @3032#]][while <exp bool> @3040#]do@3004# <lie boucle> [until <exp bool> @3041#]endloop@3050# loop while a>b for i : 1 to pos+1 step pas do … until bool endloop ; Gestion des erreurs syntaxiques Tâche 3004 : - appel à GEST_ERR_SYN

  13. Les autres instructions exécutables de bases : • Tests • Cases • Boucles vectorielles • Groupes de séquences parallèles • Débranchements de boucle • Débranchements de module • Autres instructions non traitées (relance de coroutine, rupture, allocation/désallocation…) Instructions Exécutables de Base

  14. La table des tests Instructions Exécutables de Base

  15. Instructions Exécutables de Base La table des cases, des whens et des listes

  16. La table des boucles vectorielles Instructions Exécutables de Base

  17. La table des séquences parallèles Instructions Exécutables de Base

  18. La table des débranchements de boucle Instructions Exécutables de Base

  19. <appel de procédure sans type> ::= call@3200# <ident de module> @3211# <partie paramètres actuels> <relance de coroutine> ::= resume@3201# <ident de module> @3212# <partie paramètres actuels> <enchaînement de module> ::= chain@3202# <ident de module> @3210# CALL TOTO (X, Y) ; Tâche 3200 : insertion de CALL et de la valeur de NTAPP dans la TIE Tâche 3210 : Envoi de « TOTO » à l’équipe 1 qui nous retourne l’adresse dans la TEXT Gestion des erreurs Instructions d’appel

  20. <affectation> ::= <ident dim ou non> @3240# := @3241# <exp> @3230# | inc@3241# <exp> @3231# Tâche 3240 : vérification syntaxique sur l’identificateur par le moteur de compilateur Tâche 3241 : vérification syntaxique sur l’opérateur d’affectation « := » Tâche 3230 : Traitement de l’expression derrière l’affectation Tâches 3241 et 3231 : Message à l’utilisateur  l’opérateur « inc » n’est pas autorisé dans cette version du compilateur. Affectations

  21. <insertion> ::= insert@3260# <liste d’exp> @3280#into@3272# <liste d’ident de listes> @3290# [after <exp> @3300# | before <exp> @3301# ] INSERT A,B,C INTO L1, L2 AFTER X ; Tâche 3290 : Vérification des identificateurs de liste Remplissage de TMELST Opérations sur les listes Tâche 3300 : Vérification de l’élément de référence Remplissage de TMELST Tâche 3280 : Vérification des éléments à insérer Remplissage de TMELST 5 insert 6 insert 7 insert 8 Tâche 3260 et 3272 : Vérifications syntaxiques par le moteur de compilateur insert 9 insert 10 5 A L1 X id id 6 B L1 X id id 7 C L1 X id id 8 A L2 X id id 9 B L2 X id id C L2 X id id 10

  22. <extraction> ::= extract@3261# <liste d’exp> @3281#outof@3273# <liste d’ident de listes> @3291# <organisation> ::= linear@3263 <liste d’ident de listes> @3293# | circular@3264# <liste d’ident de listes> @3294# <multiplicité> ::= single@3265# <liste d’ident de listes> @3295# | tuple@3266# <liste d’ident de listes> @3296# <classement> ::= ascend@3267# <liste d’ident de listes> @3297# | descend@3268# <liste d’ident de listes> @3298# | free@3269# <liste d’ident de listes> @3299# <vidage> ::= empty@3262# <liste d’ident de listes> @3292# <typage> ::= typelist@3270# <ident de liste> @3360# <type> @3370# | retypelist@3271# <ident de liste> @3361# <type> @3371# Opérations sur les listes

  23. <boucle ensembliste> ::= each@3310# <ident> @3320#of@3321# <ident de liste> @3330# [ \ <exp bool> @3340# ] do@3014# <lie> endeach@3350# EACH e OF L / X = A*B+3 DO {…} ENDEACH ; Boucles ensemblistes Tâche 3320 : Vérification de l’identificateur de boucle  ad D Tâche 3310 : Vérification syntaxique  ad D Tâche 3330 : Vérification de l’identificateur de liste  ad L Tâche 3340 : Vérification de la condition  ad C Tâche 3350 : Vérifications syntaxiques de fermeture de boucle  ad F 46 23 23 46 67 e L c id exp 67 23

  24. Gestion des TAD

  25. A la fin de la compilation de chaque module (si aucune erreur) Création du A-code

  26. Exemple de A-code : Toto (αh⌂ Création du A-code (32 caractères) Nom du module

  27. Exemple de A-code : Toto (αh⌂ Création du A-code (4 caractères) Nature, récursivité, nombre de paramètres, etc.

  28. Exemple de A-code : Toto (αh⌂ Création du A-code (23 caractères) TCT : 23 compteurs de tables

  29. Merci de votre attention

More Related