Forme interne du compilateur

        

 

                Cop  (Pt1,b1) (Pt2,b1) (Pt3, b1)

avec      bi = vrai     si l'objet   Pti est local

bi = faux   si l'objet   Pti est global

Pt1, Pt2, Pt3 désignent des indices dans la table des objets Tabob de la procédure courante ou

du module principal.

Si bi = vrai

c'est Tabpro[Proc_cour].Tabob[Pti].adresse

sinon c'est Tabpro[1].Tabob[Pti].adresse

Proc_cour désigne le module en cours de compilation.

 

    Affectation

    

<<<<<< Affectation : Idf := Exp

Cop : 'Aff' ou ' :='

Pt1 : Indice dans Tabob vers Idf

Pt2 :

Pt3 : Indice dans Tabob vers le résultat de Exp

 

    Structures de contrôle

   

<<<<<< Branchement conditionnel : Si Exp Aller  à  Et1 sinon aller à Et2 fsi

Cop : 'B'

Pt1 : Indice dans Tabob vers le résultat de Exp

Pt2 : Et1 ( indice dans la table des quadruplés Quadruple)

Pt3 : Et2 ( indice dans la table des quadruplés Quadruple)

 

<<<<<< Branchement inconditionnel : Aller à Et

Cop : 'Br'

Pt1 : Et ( indice dans la table des quadruplés Quadruple)

Pt2 :

Pt3 :

 

    Opérations

   

<<<<<< Opérateur de relation : Exp1 Opr Exp2   avec Opr dans [=, <, >, <=, >=, ^=, #, <>]

Cop : opérateur

Pt1 : Indice dans Tabob vers le résultat de Exp1

Pt2 : Indice dans Tabob vers le résultat de Exp2

Pt3 : Indice dans Tabob vers le résultat de l'opération ( Booléen)

 

<<<<<< Opérateur arithmétique Exp1 Op Exp2 avec Op dans [+, -, *, / ]

Cop : opérateur

Pt1 : Indice dans Tabob vers le résultat de Exp1

Pt2 : Indice dans Tabob vers le résultat de Exp2

Pt3 : Indice dans Tabob vers le résultat de l'opération ( entier)

 

<<<<<< Opérateur logiques Exp1 Op Exp2 avec Op dans [ET, OU ]

Cop : opérateur

Pt1 : Indice dans Tabob vers le résultat de Exp1

Pt2 : Indice dans Tabob vers le résultat de Exp2

Pt3 : Indice dans Tabob vers le résultat de l'opération ( booléen)

 

<<<<<< Opérateur chaînes  Exp1 op Exp2 avec op dans [+ ]

Cop : opérateur

Pt1 : Indice dans Tabob vers le résultat de Exp1

Pt2 : Indice dans Tabob vers le résultat de Exp2

Pt3 : Indice dans Tabob vers le résultat de l'opération ( chaîne)

 

<<<<<< Opérateur unaire : - Exp ou + Exp

Cop : '-U' ou '+U'

Pt1 : Indice dans Tabob vers le résultat de Exp

Pt2 :

Pt3 : Indice dans Tabob vers le résultat de l'opération

 

<<<<<< Opérateur de négation : Non Exp

Cop : 'Non'

Pt1 : Indice dans Tabob vers le résultat de Exp

Pt2 :

Pt3 : Indice dans Tabob vers le résultat de l'opération

 

    Tableaux

   

<<<<<< Déclaration de tableau  : Soit T un Tableau ....

Cop : 'Dt'

Pt1 : Indice dans Tabob vers l'Idf de tableau

Pt2 : Indice dans Tabcomp où l'on trouve la liste des bornes

Pt3 : Dimension

 

<<<<<< Elément ( fonction [ listexp ] )

Cop : 'Elément'

Pt1 : Indice dans Tabob vers le résultat de fonction

Pt2 : pointeur dans Tabcomp des résultats des expressions ( indices )

Pt3 : Indice dans Tabob vers le résultat de Elément

 

<<<<<< Aff_element ( fonction [listexp], Exp)

Cop : 'Aff_element'

Pt1 : Indice dans Tabob vers le résultat de fonction

Pt2 : pointeur dans Tabcomp vers la liste des résultats des expressions ( indices )

Pt3 : Indice dans Tabob vers le résultat de Exp ( Elément  …  affecter )

 

    Listes linéaires chaînées

   

<<<<<<  Fonctions Valeur (p), Suivant(p)

Cop : fonction

Pt1 : Indice dans Tabob vers p

Pt2 :

Pt3 : Indice dans Tabob vers le résultat de fonction

 

<<<<<< Procédures : Allouer (P), Libérer (p)

Cop : procédure

Pt1 :

Pt2 :

Pt3 : Indice dans Tabob vers P

 

<<<<<<  Aff_adr(f1,f2), Aff_val(f1, f2)

Cop : procédure

Pt1 : Indice dans Tabob vers le résultat de f1

Pt2 :

Pt3 : Indice dans Tabob vers le résultat de f2

 

    Entrées/sorties

   

<<<<<< Lire ( Idf1, Idf2, ....)

Cop : LIRE

Pt1 : pointeur dans Tabcomp vers la liste des Idf ( scalaires ou structures )

Pt2 : Nombre d'éléments

Pt3 :

<<<<<< Ecrire ( Exp, Exp ....)

Cop : ECRIRE

Pt1 : pointeur dans Tabcomp des expressions scalaires ou des structures.

Pt2 : Nombre d'éléments

Pt3 :

    Appel et retour de modules

   

<<<<<< Appel Idf ( listexp )

Cop : 'Appel'

Pt1 : Indice dans Tabob vers une constante représentant le nom de l'appelé

Pt2 : Indice dans Tabcomp ( liste de paramètres)

Pt3 : Nombre de paramètres

<<<<<< Retour d'un module

Cop : Ret

Pt1 :

Pt2 : égal à 0 et désigne l'adresse dans Tabcomp où l'on trouve la liste des paramètres.

Pt3 :

    Opération de haut niveau

   

<<<<<<CREER_LISTE( Idf , [ ~exp/[exp {, exp}*]~ {, ~exp/[exp {, exp}*]~}*  ] )

              INIT_VECTEUR, INIT_TABLEAU

Cop : procédure

Pt1 : Indice dans Tabob vers l'Idf

Pt2 : Indice dans Tabcomp vers la liste des valeurs d'initialisation

Pt3:

si la valeur est une variable de type structure, on met dans un maillon de  cette liste l'objet correspondant. si la valeur est une constante 'structure', cad délimitée par '[' et ']' alors on crée autant de maillons que de valeurs dans cette structure.

 

EXEMPLE

INIT_VECTEUR(V, [ [a,5, faux], x, [23, z, vrai] ]) crée une liste avec 7 maillons.

 

    En-tête de module

Cop : Proc

Pt1 : Nombre de paramètres

Pt2 : Indice dans Tabcomp  où l'on trouve les paramètres formels

Pt3 : Indice dans Tabpro

 

    Machines de Turing

   

<<<<<< Lirenombre(M, Idf), lirecar(M, Idf)

Cop : procedure

Pt1 : Indice dans Tabob vers la Machine-caractères ( ou Machine-Nombres )

Pt2 : Indice dans Tabob vers l'Idf

Pt3 :

<<<<<< Nbrnombre(M), Nbrcar(M)

Cop : fonction

Pt1 : Indice dans Tabob vers la Machine-caractères ( ou Machine-Nombres )

Pt2 :

Pt3 : Indice dans Tabob vers le résultat de la fonction

 

<<<<<< CREER_MNOMBRE (M, [Listexp])

Cop : CREER_MNOMBRE

Pt1 : Indice dans Tabob vers la Machine-nombres (M)

Pt2 : indice dans Tabcomp vers la liste des expressions

Pt3 : Nombre d'expressions

 

<<<<<<  CREER_MCAR ( M, [ Chaine ] )

Cop : CREER_MCAR

Pt1 : Indice dans Tabob vers la Machine-caractères (M)

Pt2 : indice dans Tabob vers la chaine Chaine

Pt3 :

 

    Structures

 

<<<<<< Déclaration de structures Soir Idf une Structure ....

Cop : Ds

Pt1 : Indice dans Tabob vers l'objet composé'

Pt2 : Nombre de champs

Pt3 :

<<<<<< Struct (Idf, cste)

Cop : Struct

Pt1 : Indice dans Tabob vers l'objet composé

Pt2 : numéro du champ ( constante)

Pt3 : Indice dans Tabob vers le résultat de Struct

<<<<<< Aff_Struct (Idf, cste, Exp)

Cop : Aff_struct

Pt1 : Indice dans Tabob vers l'objet composé

Pt2 : Numéro du champ ( constante )

PT3 : Indice dans Tabob vers l'expression … affecter

<<<<<< Init_Struct (Idf, [...])

Cop : Init_struct

Pt1 : Indice dans Tabob vers l'objet composé

Pt2 : Indice dans Tabcomp vers liste des expressions scalaires.

PT3 : Nombre d'expressions

 

    Fichiers

   

 

<<<<<< Déclaration de fichier  : Soit Idf Un Fichier de ...

Cop : Df

Pt1 : Indice dans Tabob vers le fichier;

Pt2 : absence(1) ou présence(2) des caractéristiques

Pt3 : Indice dans Tabconscar vers les types des caract. (si Pt2=2)

 

<<<<<< Ouvrir(F, fichier physique, mode)

Cop : OUVRIR

Pt1 : Indice dans Tabob vers le fichier

Pt2 : Indice dans Tabconscar vers le nom physique

Pt3 : Indice dans Tabconscar vers le mode d'ouverture ('A' ou 'N')

 

<<<<<< Fermer(F)

Cop :FERMER

Pt1 :

Pt2 :

Pt3 : Indice dans Tabob vers le fichier

 

<<<<<< Liredir(F, num, Buffer),  Ecriredir(F, num, Buffer)

Cop = Liredir ou  Ecriredir

Pt1 : Indice dans Tabob vers le fichier

Pt2 : Indice dans Tabob vers le buffer

Pt3 : Indice dans Tabob vers le numéro

 

<<<<<< Lireseq(F, Buffer), Ecrireseq(F, Buffer), Rajouter(F, Buffer)

Cop :  Lireseq ou Ecrireseq ou Rajouter

Pt1 : Indice dans Tabob vers le fichier

Pt2 : Indice dans Tabob vers le buffer

Pt3 :

<<<<<< Entete(F, num)

Cop : ENTETE

Pt1 : Indice dans Tabob vers le fichier

Pt2 : rang (constante)

Pt3 : Indice dans Tabob vers le résultat

 

<<<<<< Aff_entete( F, num, exp)

Cop : AFF_ENTETE

Pt1 : Indice dans Tabob vers le fichier

Pt2 : rang (constante)

Pt3 : Indice dans Tabob vers la valeur à affecter

 

<<<<<< Finfich(F) 

Cop : FINFICH

Pt1 : Indice dans Tabob vers le fichier

Pt2 :

Pt3 : Indice dans Tabob vers le résultat

 

<<<<<< Alloc_bloc(F)

Cop : ALLOC_BLOC

Pt1 : Indice dans Tabob vers le fichier

Pt2 :

Pt3 : Indice dans Tabob vers le résultat