0% ont trouvé ce document utile (0 vote)
13 vues2 pages

Analyse Sémantique et Typage Statique

L'analyse sémantique vérifie la validité des instructions dans un programme en se basant sur la sémantique du langage, en utilisant une table des symboles pour gérer les propriétés des identificateurs. Elle est effectuée statiquement lors de la compilation, ce qui peut entraîner le rejet d'instructions correctes sémantiquement mais incorrectes selon le typage statique. Le typage statique, plus restrictif que le typage dynamique, peut être réalisé par vérification de type ou inférence de type, influençant la gestion de la mémoire et la taille des données.

Transféré par

ame.4x0
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
13 vues2 pages

Analyse Sémantique et Typage Statique

L'analyse sémantique vérifie la validité des instructions dans un programme en se basant sur la sémantique du langage, en utilisant une table des symboles pour gérer les propriétés des identificateurs. Elle est effectuée statiquement lors de la compilation, ce qui peut entraîner le rejet d'instructions correctes sémantiquement mais incorrectes selon le typage statique. Le typage statique, plus restrictif que le typage dynamique, peut être réalisé par vérification de type ou inférence de type, influençant la gestion de la mémoire et la taille des données.

Transféré par

ame.4x0
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

III. Analyse Sémantique. 8ème Cours.

Certaines expressions peuvent être syntaxiquement correctes mais peuvent ne pas avoir
de sens par rapport à la sémantique du langage. Par exemple, en Pascal : i : =1.5 ; A[i] : = 4
sont correctes syntaxiquement mais n’ont pas de sémantique (sens).
L’analyse sémantique étudie l’arbre de syntaxe abstraite produit par l’analyse syntaxique
pour détecter les instructions qui ne sont pas correctes du point de vue de la sémantique.
Par exemple, on vérifie la portée des variables et le typage des expressions.
L’analyse sémantique est statique, c’est-à-dire qu’elle se fait au moment de la
compilation. Par conséquent, elle ne peut exclure certains programmes dont on ne peut
savoir s’ils sont corrects sémantiquement que dynamiquement, au moment de l’exécution.
Par exemple, l’analyse sémantique ne rejettera pas un programme comme :
Var
T: array [1..10] of Integer;
Begin
For i: = 1 To 11 do Read (T[i])
End.

Table des symboles


Le fonctionnement typique de l’analyse sémantique est de parcourir l’AST (Abstract
Syntax Tree) pour vérifier certaines propriétés comme la portée des identificateurs ou le
typage. Pour ne pas avoir à remonter dans l’arbre pour rechercher des informations sur la
portée ou le type d’un identificateur, on va stocker ces informations dans une structure
externe appelée table des symboles, qui sera conservée tout au long du compilateur. Cette
table sera créée dès l’analyse syntaxique et sera enrichie au cours des différentes phases du
compilateur. Elle associe à chaque identificateur du programme un ensemble de propriétés,
dont la nature (nom de fonction, de variable, etc.), la portée, le type, etc. Elle peut être
implémentée par exemple à l’aide d’une table de hachage.

Typage
Le typage permet de restreindre fortement le nombre d’instructions sémantiquement
incorrectes. On parle ici du typage statique, effectué au moment de la compilation, à ne pas
confondre avec le typage dynamique qui peut avoir lieu au moment de l’exécution (comme
en PHP, perl ou python). Le but est de s’assurer au moment de la compilation que le
programme sera correct du point de vue des types au moment de l’exécution. L’analyse des
types permet également de disposer d’informations utiles pour le compilateur, comme par
exemple la taille des données en mémoire.
Le typage statique est en général obligé de rejeter des instructions qui sont pourtant
correctes sémantiquement, comme par exemple :
Var i: Integer;
Y: Real;
X: Boolean
Read (y)
(* x Toujours True*)
If x = True Then i: = 0 Else i: = 3 + y
Ce que ne ferait pas un typage dynamique, la deuxième branche n’étant jamais effectuée.
III. Analyse Sémantique. 8ème Cours.

Le typage statique est donc plus restrictif que le typage dynamique. Toutefois, en typage
statique, une fois l’analyse de type effectuée, les types peuvent être complètement retirés
du programme, tandis qu’en typage dynamique, les données doivent garder une information
de typage, ce qui accroît leur taille en mémoire.
On distingue deux familles de typage statique : la simple vérification de type et l’inférence
de type.
Dans le premier cas, toutes les variables doivent être associées à un type, et le prototype
des fonctions est explicite. Ce type est associé à l’identificateur dans la table des symboles
au moment de l’analyse de la déclaration de variable ou de fonction. L’analyse de type se
contente de parcourir l’AST de bas en haut en vérifiant que les types des arguments des
fonctions et des opérateurs sont corrects (en utilisant la table des symboles pour trouver les
types des variables et des fonctions).
Pour l’inférence de type, l’utilisateur ait à spécifier explicitement le type et l’analyse de
type vérifie juste que le type donné par l’utilisateur est égal au type synthétisé lors de
l’inférence.

Vous aimerez peut-être aussi