SlideShare une entreprise Scribd logo
ALF
Arbre de syntaxe abstraite
Bibliographie pour aujourd'hui
Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey
D. Ullman, Compilers: Principles, Techniques,
and Tools (2nd Edition)
– Chapitre 5
• 5.1
• 5.2
• 5.3
Contenu
• Définition dirigée par
syntaxe (SDD)
– S-attributs
– L-attributs
• Types
• Arbre de syntaxe abstraite
• Analyse sémantique
Grace Hopper
• Américain
• Vassar College
• Yale
• Premier compilateur
• Langage A-0
The Imitation Game
Slides
Partie de slides sont écrie par
Bogdan Nitulescu
Frontend
Source
Lexer Parser Semantic
AST
Tokens Parse Tree
Unexpected token … Expected …
Object has no
function …
Analyse sémantique
Analyse sémantique
Programmes lexicales corrects Analyse lexicale
Analyse syntactique
Programmes syntaxiquement correctes
Programmes qui compilent sans erreur
Programmes en cours
d'exécution sans erreurs
Analyse sémantique
 Nous sommes intéressés par
 Annotez l'arbre de syntaxe avec des informations de
type
 Créer le tableau des symboles
 Ajouter des noeuds "typecast"
 La plupart de l'analyse sémantique se réfère à la
gestion du contexte
Analyse sémantique
• a=b;
• e = a*b;
• sum (a, b);
• a[i] = s;
• s.element = 7;
Définition dirigée par syntaxe
• Syntax-Directed Definitions (SDD)
– Grammaire
– Attributs
– Règles (pour les attributs)
E -> E + E { … }
Attributs
• Grammaire
– E -> E + E
• Attributs
– E.val - valeur
– E.type - type
SDD Exemple
Production Règle
L-> E L.val = E.val
E -> E1 + T E.val = E1.val + T.val
E -> T E.val = T.val
T -> T1 * F T.val = T1.val * F.val
T -> F T.val = F.val
F -> ( E ) F.val = E.val
F-> digit F.val = digit.text
Translation dirigée par syntaxe
• Syntax-Directed Translation (SDT)
– Grammaire
– Attributs
– Règles (pour les attributs)
– Actions
E -> E + E { … }
Arbre de syntaxe abstraite
Parse Tree AST
function
FUNCTION s LP parameters
a COMMA parameters
b
RP LB statements
return
RETURN expression
a
PLUS
b
PV
RB
FUNCTION (name: s,
parameters: [a, b])
RETURN
PLUS
VAR (name: a)
VAR (name: b)
Exemple de AST
function factorial (n)
{
var f = 1;
for (var i=1; i < n; i++)
f = f * i;
return f;
}
Exemple de AST
{
“type”: “function”,
“name”: “factorial”,
“parameters”: {
“n”: “var”
},
statements: [ … ]
}
Contexte (scope)
 Les contextes mémorisent les déclarations
 Nom et structure de type
 Nom de variable
 Nom, type de retour et les paramètres pour les fonctions
 Lorsqu'elles sont déclarées, les variables, les types et les
fonctions sont ajoutés au contexte
 Lorsqu'ils sont consultés, ils sont recherchés dans le
contexte actuel
 Les contextes sont imbriqués
Contexte
Image from http://staff.polito.it/silvano.rivoira/HowToWriteYourOwnCompiler_file/Page392.htm
Contexte - exemple
 C++
 Locale (block { … } ou fichier)
 Label - le contexte c’est la fonction
 Attributs/méthodes – toute la classe.
 Java
 Niveaux: Package, Class, Inner class, Method
Contexte et espace de nom
 C:
 typedef int foo; foo foo;
 int int;
 Java
 Integer Integer = new Integer(4);
 C, Java:
 int foo(x) { return x+4;}
 int f() { int foo=3; return foo(foo);}
Implémentation du contexte
 Tableau de symbole
 Actions:
 Nouveau contexte
 Ajoute un symbole
 Retrouve un symbole
 Ferme le contexte
 Pile ou hashtable
Pile
var a;
function work (p)
{
var i;
{
var a;
let l;
}
}
• l: var
Inside
{…}
• p: var
• i: var
• a: var
work
• a: var
• work: function
Program
Hashtable
var a;
function work (p)
{
var i;
{
var a;
let l;
}
}
Symbol Type
a_program var
work_program function
i_work var
a_work var
l_work_inner var
Exemple de AST
function factorial (n) // make new context (function)
{
// add variable n to conext
var f = 1; // add variable f to conext
for (var i=1; i < n; i++) // make new context (for),
//add variable i to context (function)
f = f * i;
// destroy context (for)
return f;
// destroy context (function)
}
Contexte statique et dynamique
 Statique - a la compilation
 C/C++
 Java
 Pascal
 Dynamique – lors de l'exécution
 Javascript
 Python
 Ruby
Types
 Type
 Valeurs autorisées
 Opérations autorisées
 Types
 Simple
 int, float, double, char, bool
 Composée
 array, string, pointer, struct
 Complexe
 listes ,arbres
Paramètres pour les type
 Simple
 Le type (int, char, float … )
 Compose
 struct
 Liste avec les components
 Nom
 Type
 array
 Type des éléments
 Numéro des éléments
 Les index
Les types sont pour
 Constantes
 Variables
 Fonctions
 Expressions
 Instructions
Langage et type
• Dynamique vs. Statique
• Ou est-ce que la vérification de type est
effectuée?
Exécution vs compilation
• Strongly typed vs. Weakly typed
• Que se passe-t-il si les types ne
correspondent pas?
Erreur vs. conversion
Vérification de type
 Synthèse
 Détermination de type pour un instruction
 Expression
 Overloading
 Inférence
 Détermine un type dans le contexte
Equivalence de types compose
 Un arbre pour l’information de type
 Nom
 Structure
 Vérifiez de façon récursive que l'arbre correspond
Inférence de type
 Déduction de type pour un expression
dans le contexte
 A compilation ou a exécution.
 C’est important
 Vérification de type
 Overloading de fonction
 Conversion implicite
 Widening / Narrowing
Sujets
• Définition dirigée par syntaxe (SDD)
• Types
• Arbre de syntaxe abstraite
• Analyse sémantique
Questions

Contenu connexe

Tendances

ALF 6 - Parser
ALF 6 - ParserALF 6 - Parser
ALF 6 - Parser
Alexandru Radovici
 
ALF 3 - Expressions régulières et Lexer
ALF 3 - Expressions régulières et Lexer ALF 3 - Expressions régulières et Lexer
ALF 3 - Expressions régulières et Lexer
Alexandru Radovici
 
ALF 5 - Parser
ALF 5 - ParserALF 5 - Parser
ALF 5 - Parser
Alexandru Radovici
 
ALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-UpALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-Up
Alexandru Radovici
 
ALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-UpALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-Up
Alexandru Radovici
 
ALF 2 - Automates Fini (2018)
ALF 2 - Automates Fini (2018)ALF 2 - Automates Fini (2018)
ALF 2 - Automates Fini (2018)
Alexandru Radovici
 
ALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-UpALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-Up
Alexandru Radovici
 
ALF 8 - Generation du code
ALF 8 - Generation du codeALF 8 - Generation du code
ALF 8 - Generation du code
Alexandru Radovici
 
ALF 8 - Generation de code
ALF 8 - Generation de codeALF 8 - Generation de code
ALF 8 - Generation de code
Alexandru Radovici
 
ALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlleALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlle
Alexandru Radovici
 
ALF 11 - WebAssembly
ALF 11 - WebAssemblyALF 11 - WebAssembly
ALF 11 - WebAssembly
Alexandru Radovici
 
ALF 10 - Convention d'appel de fonction
ALF 10 - Convention d'appel de fonctionALF 10 - Convention d'appel de fonction
ALF 10 - Convention d'appel de fonction
Alexandru Radovici
 
ALF 9 - Generation de code
ALF 9 - Generation de codeALF 9 - Generation de code
ALF 9 - Generation de code
Alexandru Radovici
 
ALF 12 - Optimisations
ALF 12 - OptimisationsALF 12 - Optimisations
ALF 12 - Optimisations
Alexandru Radovici
 
cour de compilation
cour de compilation cour de compilation
cour de compilation
Ens Kouba
 
Le décodage Kaldi/FST pour la reconnaissance de l'écriture
Le décodage Kaldi/FST pour la reconnaissance de l'écriture Le décodage Kaldi/FST pour la reconnaissance de l'écriture
Le décodage Kaldi/FST pour la reconnaissance de l'écriture
Wassim Swaileh
 
Initiation r
Initiation rInitiation r
Python
PythonPython

Tendances (18)

ALF 6 - Parser
ALF 6 - ParserALF 6 - Parser
ALF 6 - Parser
 
ALF 3 - Expressions régulières et Lexer
ALF 3 - Expressions régulières et Lexer ALF 3 - Expressions régulières et Lexer
ALF 3 - Expressions régulières et Lexer
 
ALF 5 - Parser
ALF 5 - ParserALF 5 - Parser
ALF 5 - Parser
 
ALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-UpALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-Up
 
ALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-UpALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-Up
 
ALF 2 - Automates Fini (2018)
ALF 2 - Automates Fini (2018)ALF 2 - Automates Fini (2018)
ALF 2 - Automates Fini (2018)
 
ALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-UpALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-Up
 
ALF 8 - Generation du code
ALF 8 - Generation du codeALF 8 - Generation du code
ALF 8 - Generation du code
 
ALF 8 - Generation de code
ALF 8 - Generation de codeALF 8 - Generation de code
ALF 8 - Generation de code
 
ALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlleALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlle
 
ALF 11 - WebAssembly
ALF 11 - WebAssemblyALF 11 - WebAssembly
ALF 11 - WebAssembly
 
ALF 10 - Convention d'appel de fonction
ALF 10 - Convention d'appel de fonctionALF 10 - Convention d'appel de fonction
ALF 10 - Convention d'appel de fonction
 
ALF 9 - Generation de code
ALF 9 - Generation de codeALF 9 - Generation de code
ALF 9 - Generation de code
 
ALF 12 - Optimisations
ALF 12 - OptimisationsALF 12 - Optimisations
ALF 12 - Optimisations
 
cour de compilation
cour de compilation cour de compilation
cour de compilation
 
Le décodage Kaldi/FST pour la reconnaissance de l'écriture
Le décodage Kaldi/FST pour la reconnaissance de l'écriture Le décodage Kaldi/FST pour la reconnaissance de l'écriture
Le décodage Kaldi/FST pour la reconnaissance de l'écriture
 
Initiation r
Initiation rInitiation r
Initiation r
 
Python
PythonPython
Python
 

Similaire à ALF 7 - Arbre de syntaxe abstraite

Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojure
lolopetit
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scala
SOAT
 
Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Avec le langage R, prenez de la hauteur dans l’analyse de vos données ! Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Yi YANG
 
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
MSDEVMTL
 
Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4
Laurent BUNIET
 
cour informatique niveau3 programmation en Python.pdf
cour informatique niveau3 programmation en  Python.pdfcour informatique niveau3 programmation en  Python.pdf
cour informatique niveau3 programmation en Python.pdf
Nanchi6
 
Scalar Types Hints
Scalar Types HintsScalar Types Hints
Scalar Types Hints
Darkmira
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvements
Didier Plaindoux
 
Data Mining (Partie 2).pdf
Data Mining (Partie 2).pdfData Mining (Partie 2).pdf
Data Mining (Partie 2).pdf
OuailChoukhairi
 
Introduction à l'analyse de réseaux avec R
Introduction à l'analyse de réseaux avec RIntroduction à l'analyse de réseaux avec R
Introduction à l'analyse de réseaux avec R
Laurent Beauguitte
 
Java 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambda
Ch'ti JUG
 
Langage Perl
Langage PerlLangage Perl
Langage Perl
Rached Krim
 
Développement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdfDéveloppement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdf
YasushiTsubakik
 
Présentation Logiciel R.pptx
Présentation Logiciel R.pptxPrésentation Logiciel R.pptx
Présentation Logiciel R.pptx
ssusera0d0e81
 
compilation1-2020.pdf
compilation1-2020.pdfcompilation1-2020.pdf
compilation1-2020.pdf
aouatifelallaji
 
XML Xpath & XSLT
XML  Xpath & XSLTXML  Xpath & XSLT
XML Xpath & XSLT
ENSAM Casablanca
 
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP
Abdoulaye Dieng
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinter
RYMAA
 

Similaire à ALF 7 - Arbre de syntaxe abstraite (19)

Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojure
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scala
 
Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Avec le langage R, prenez de la hauteur dans l’analyse de vos données ! Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
 
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
 
Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4
 
cour informatique niveau3 programmation en Python.pdf
cour informatique niveau3 programmation en  Python.pdfcour informatique niveau3 programmation en  Python.pdf
cour informatique niveau3 programmation en Python.pdf
 
Scalar Types Hints
Scalar Types HintsScalar Types Hints
Scalar Types Hints
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvements
 
Data Mining (Partie 2).pdf
Data Mining (Partie 2).pdfData Mining (Partie 2).pdf
Data Mining (Partie 2).pdf
 
Introduction à l'analyse de réseaux avec R
Introduction à l'analyse de réseaux avec RIntroduction à l'analyse de réseaux avec R
Introduction à l'analyse de réseaux avec R
 
Java 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambda
 
Langage Perl
Langage PerlLangage Perl
Langage Perl
 
Développement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdfDéveloppement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdf
 
Présentation Logiciel R.pptx
Présentation Logiciel R.pptxPrésentation Logiciel R.pptx
Présentation Logiciel R.pptx
 
compilation1-2020.pdf
compilation1-2020.pdfcompilation1-2020.pdf
compilation1-2020.pdf
 
XML Xpath & XSLT
XML  Xpath & XSLTXML  Xpath & XSLT
XML Xpath & XSLT
 
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinter
 
Drools
DroolsDrools
Drools
 

Plus de Alexandru Radovici

SdE2 - Pilot Tock
SdE2 - Pilot TockSdE2 - Pilot Tock
SdE2 - Pilot Tock
Alexandru Radovici
 
SdE2 - Systèmes embarquées
SdE2 - Systèmes embarquéesSdE2 - Systèmes embarquées
SdE2 - Systèmes embarquées
Alexandru Radovici
 
SdE2 - Planification, IPC
SdE2 - Planification, IPCSdE2 - Planification, IPC
SdE2 - Planification, IPC
Alexandru Radovici
 
ALF1 - Introduction
ALF1 - IntroductionALF1 - Introduction
ALF1 - Introduction
Alexandru Radovici
 
SdE2 - Introduction
SdE2 - IntroductionSdE2 - Introduction
SdE2 - Introduction
Alexandru Radovici
 
MDAD 6 - AIDL and Services
MDAD 6 - AIDL and ServicesMDAD 6 - AIDL and Services
MDAD 6 - AIDL and Services
Alexandru Radovici
 
MDAD 5 - Threads
MDAD 5 - ThreadsMDAD 5 - Threads
MDAD 5 - Threads
Alexandru Radovici
 
MDAD 4 - Lists, adapters and recycling
MDAD 4 - Lists, adapters and recyclingMDAD 4 - Lists, adapters and recycling
MDAD 4 - Lists, adapters and recycling
Alexandru Radovici
 
MDAD 3 - Basics of UI Applications
MDAD 3 - Basics of UI ApplicationsMDAD 3 - Basics of UI Applications
MDAD 3 - Basics of UI Applications
Alexandru Radovici
 
MDAD 2 - Introduction to the Android Framework
MDAD 2 - Introduction to the Android FrameworkMDAD 2 - Introduction to the Android Framework
MDAD 2 - Introduction to the Android Framework
Alexandru Radovici
 
MDAD 1 - Hardware
MDAD 1 - HardwareMDAD 1 - Hardware
MDAD 1 - Hardware
Alexandru Radovici
 
MDAD 0 - Introduction
MDAD 0 - IntroductionMDAD 0 - Introduction
MDAD 0 - Introduction
Alexandru Radovici
 
SdE 11 - Reseau
SdE 11 - ReseauSdE 11 - Reseau
SdE 11 - Reseau
Alexandru Radovici
 
SdE 10 - Threads
SdE 10 - ThreadsSdE 10 - Threads
SdE 10 - Threads
Alexandru Radovici
 
SdE 8 - Synchronisation de execution
SdE 8 - Synchronisation de executionSdE 8 - Synchronisation de execution
SdE 8 - Synchronisation de execution
Alexandru Radovici
 
SdE 8 - Memoire Virtuelle
SdE 8 - Memoire VirtuelleSdE 8 - Memoire Virtuelle
SdE 8 - Memoire Virtuelle
Alexandru Radovici
 
SdE 7 - Gestion de la Mémoire
SdE 7 - Gestion de la MémoireSdE 7 - Gestion de la Mémoire
SdE 7 - Gestion de la Mémoire
Alexandru Radovici
 
SdE 6 - Planification
SdE 6 - PlanificationSdE 6 - Planification
SdE 6 - Planification
Alexandru Radovici
 
SdE 5 - Planification
SdE 5 - PlanificationSdE 5 - Planification
SdE 5 - Planification
Alexandru Radovici
 
SdE2 4 - Processus
SdE2 4 - ProcessusSdE2 4 - Processus
SdE2 4 - Processus
Alexandru Radovici
 

Plus de Alexandru Radovici (20)

SdE2 - Pilot Tock
SdE2 - Pilot TockSdE2 - Pilot Tock
SdE2 - Pilot Tock
 
SdE2 - Systèmes embarquées
SdE2 - Systèmes embarquéesSdE2 - Systèmes embarquées
SdE2 - Systèmes embarquées
 
SdE2 - Planification, IPC
SdE2 - Planification, IPCSdE2 - Planification, IPC
SdE2 - Planification, IPC
 
ALF1 - Introduction
ALF1 - IntroductionALF1 - Introduction
ALF1 - Introduction
 
SdE2 - Introduction
SdE2 - IntroductionSdE2 - Introduction
SdE2 - Introduction
 
MDAD 6 - AIDL and Services
MDAD 6 - AIDL and ServicesMDAD 6 - AIDL and Services
MDAD 6 - AIDL and Services
 
MDAD 5 - Threads
MDAD 5 - ThreadsMDAD 5 - Threads
MDAD 5 - Threads
 
MDAD 4 - Lists, adapters and recycling
MDAD 4 - Lists, adapters and recyclingMDAD 4 - Lists, adapters and recycling
MDAD 4 - Lists, adapters and recycling
 
MDAD 3 - Basics of UI Applications
MDAD 3 - Basics of UI ApplicationsMDAD 3 - Basics of UI Applications
MDAD 3 - Basics of UI Applications
 
MDAD 2 - Introduction to the Android Framework
MDAD 2 - Introduction to the Android FrameworkMDAD 2 - Introduction to the Android Framework
MDAD 2 - Introduction to the Android Framework
 
MDAD 1 - Hardware
MDAD 1 - HardwareMDAD 1 - Hardware
MDAD 1 - Hardware
 
MDAD 0 - Introduction
MDAD 0 - IntroductionMDAD 0 - Introduction
MDAD 0 - Introduction
 
SdE 11 - Reseau
SdE 11 - ReseauSdE 11 - Reseau
SdE 11 - Reseau
 
SdE 10 - Threads
SdE 10 - ThreadsSdE 10 - Threads
SdE 10 - Threads
 
SdE 8 - Synchronisation de execution
SdE 8 - Synchronisation de executionSdE 8 - Synchronisation de execution
SdE 8 - Synchronisation de execution
 
SdE 8 - Memoire Virtuelle
SdE 8 - Memoire VirtuelleSdE 8 - Memoire Virtuelle
SdE 8 - Memoire Virtuelle
 
SdE 7 - Gestion de la Mémoire
SdE 7 - Gestion de la MémoireSdE 7 - Gestion de la Mémoire
SdE 7 - Gestion de la Mémoire
 
SdE 6 - Planification
SdE 6 - PlanificationSdE 6 - Planification
SdE 6 - Planification
 
SdE 5 - Planification
SdE 5 - PlanificationSdE 5 - Planification
SdE 5 - Planification
 
SdE2 4 - Processus
SdE2 4 - ProcessusSdE2 4 - Processus
SdE2 4 - Processus
 

Dernier

1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif
NadineHG
 
1eT Revolutions Empire Revolution Empire
1eT Revolutions Empire Revolution Empire1eT Revolutions Empire Revolution Empire
1eT Revolutions Empire Revolution Empire
NadineHG
 
MS-203 Microsoft 365 Messaging Study Guide to prepare the certification
MS-203 Microsoft 365 Messaging Study Guide to prepare the certificationMS-203 Microsoft 365 Messaging Study Guide to prepare the certification
MS-203 Microsoft 365 Messaging Study Guide to prepare the certification
OlivierLumeau1
 
Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024
Friends of African Village Libraries
 
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
Editions La Dondaine
 
Chap1 Généralités sur les réseaux informatiques.pdf
Chap1 Généralités sur les réseaux informatiques.pdfChap1 Généralités sur les réseaux informatiques.pdf
Chap1 Généralités sur les réseaux informatiques.pdf
TimogoTRAORE
 
Auguste Herbin.pptx Peintre français
Auguste   Herbin.pptx Peintre   françaisAuguste   Herbin.pptx Peintre   français
Auguste Herbin.pptx Peintre français
Txaruka
 
MARTYRS DE HOLLANDE - La révolte hollandaise et les guerres de religion..pptx
MARTYRS DE HOLLANDE - La révolte hollandaise et les guerres de religion..pptxMARTYRS DE HOLLANDE - La révolte hollandaise et les guerres de religion..pptx
MARTYRS DE HOLLANDE - La révolte hollandaise et les guerres de religion..pptx
Martin M Flynn
 
Zineb Mekouar.pptx Écrivaine marocaine
Zineb Mekouar.pptx   Écrivaine  marocaineZineb Mekouar.pptx   Écrivaine  marocaine
Zineb Mekouar.pptx Écrivaine marocaine
Txaruka
 
[218_phot_d'Autriche-Hongrie_et_des_[...]Vaffier_Hubert_btv1b8594559c.pdf
[218_phot_d'Autriche-Hongrie_et_des_[...]Vaffier_Hubert_btv1b8594559c.pdf[218_phot_d'Autriche-Hongrie_et_des_[...]Vaffier_Hubert_btv1b8594559c.pdf
[218_phot_d'Autriche-Hongrie_et_des_[...]Vaffier_Hubert_btv1b8594559c.pdf
mcevapi3
 

Dernier (10)

1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif
 
1eT Revolutions Empire Revolution Empire
1eT Revolutions Empire Revolution Empire1eT Revolutions Empire Revolution Empire
1eT Revolutions Empire Revolution Empire
 
MS-203 Microsoft 365 Messaging Study Guide to prepare the certification
MS-203 Microsoft 365 Messaging Study Guide to prepare the certificationMS-203 Microsoft 365 Messaging Study Guide to prepare the certification
MS-203 Microsoft 365 Messaging Study Guide to prepare the certification
 
Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024
 
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
 
Chap1 Généralités sur les réseaux informatiques.pdf
Chap1 Généralités sur les réseaux informatiques.pdfChap1 Généralités sur les réseaux informatiques.pdf
Chap1 Généralités sur les réseaux informatiques.pdf
 
Auguste Herbin.pptx Peintre français
Auguste   Herbin.pptx Peintre   françaisAuguste   Herbin.pptx Peintre   français
Auguste Herbin.pptx Peintre français
 
MARTYRS DE HOLLANDE - La révolte hollandaise et les guerres de religion..pptx
MARTYRS DE HOLLANDE - La révolte hollandaise et les guerres de religion..pptxMARTYRS DE HOLLANDE - La révolte hollandaise et les guerres de religion..pptx
MARTYRS DE HOLLANDE - La révolte hollandaise et les guerres de religion..pptx
 
Zineb Mekouar.pptx Écrivaine marocaine
Zineb Mekouar.pptx   Écrivaine  marocaineZineb Mekouar.pptx   Écrivaine  marocaine
Zineb Mekouar.pptx Écrivaine marocaine
 
[218_phot_d'Autriche-Hongrie_et_des_[...]Vaffier_Hubert_btv1b8594559c.pdf
[218_phot_d'Autriche-Hongrie_et_des_[...]Vaffier_Hubert_btv1b8594559c.pdf[218_phot_d'Autriche-Hongrie_et_des_[...]Vaffier_Hubert_btv1b8594559c.pdf
[218_phot_d'Autriche-Hongrie_et_des_[...]Vaffier_Hubert_btv1b8594559c.pdf
 

ALF 7 - Arbre de syntaxe abstraite

  • 2. Bibliographie pour aujourd'hui Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman, Compilers: Principles, Techniques, and Tools (2nd Edition) – Chapitre 5 • 5.1 • 5.2 • 5.3
  • 3. Contenu • Définition dirigée par syntaxe (SDD) – S-attributs – L-attributs • Types • Arbre de syntaxe abstraite • Analyse sémantique
  • 4. Grace Hopper • Américain • Vassar College • Yale • Premier compilateur • Langage A-0
  • 6. Slides Partie de slides sont écrie par Bogdan Nitulescu
  • 7. Frontend Source Lexer Parser Semantic AST Tokens Parse Tree Unexpected token … Expected … Object has no function …
  • 8. Analyse sémantique Analyse sémantique Programmes lexicales corrects Analyse lexicale Analyse syntactique Programmes syntaxiquement correctes Programmes qui compilent sans erreur Programmes en cours d'exécution sans erreurs
  • 9. Analyse sémantique  Nous sommes intéressés par  Annotez l'arbre de syntaxe avec des informations de type  Créer le tableau des symboles  Ajouter des noeuds "typecast"  La plupart de l'analyse sémantique se réfère à la gestion du contexte
  • 10. Analyse sémantique • a=b; • e = a*b; • sum (a, b); • a[i] = s; • s.element = 7;
  • 11. Définition dirigée par syntaxe • Syntax-Directed Definitions (SDD) – Grammaire – Attributs – Règles (pour les attributs) E -> E + E { … }
  • 12. Attributs • Grammaire – E -> E + E • Attributs – E.val - valeur – E.type - type
  • 13. SDD Exemple Production Règle L-> E L.val = E.val E -> E1 + T E.val = E1.val + T.val E -> T E.val = T.val T -> T1 * F T.val = T1.val * F.val T -> F T.val = F.val F -> ( E ) F.val = E.val F-> digit F.val = digit.text
  • 14. Translation dirigée par syntaxe • Syntax-Directed Translation (SDT) – Grammaire – Attributs – Règles (pour les attributs) – Actions E -> E + E { … }
  • 15. Arbre de syntaxe abstraite Parse Tree AST function FUNCTION s LP parameters a COMMA parameters b RP LB statements return RETURN expression a PLUS b PV RB FUNCTION (name: s, parameters: [a, b]) RETURN PLUS VAR (name: a) VAR (name: b)
  • 16. Exemple de AST function factorial (n) { var f = 1; for (var i=1; i < n; i++) f = f * i; return f; }
  • 17. Exemple de AST { “type”: “function”, “name”: “factorial”, “parameters”: { “n”: “var” }, statements: [ … ] }
  • 18. Contexte (scope)  Les contextes mémorisent les déclarations  Nom et structure de type  Nom de variable  Nom, type de retour et les paramètres pour les fonctions  Lorsqu'elles sont déclarées, les variables, les types et les fonctions sont ajoutés au contexte  Lorsqu'ils sont consultés, ils sont recherchés dans le contexte actuel  Les contextes sont imbriqués
  • 20. Contexte - exemple  C++  Locale (block { … } ou fichier)  Label - le contexte c’est la fonction  Attributs/méthodes – toute la classe.  Java  Niveaux: Package, Class, Inner class, Method
  • 21. Contexte et espace de nom  C:  typedef int foo; foo foo;  int int;  Java  Integer Integer = new Integer(4);  C, Java:  int foo(x) { return x+4;}  int f() { int foo=3; return foo(foo);}
  • 22. Implémentation du contexte  Tableau de symbole  Actions:  Nouveau contexte  Ajoute un symbole  Retrouve un symbole  Ferme le contexte  Pile ou hashtable
  • 23. Pile var a; function work (p) { var i; { var a; let l; } } • l: var Inside {…} • p: var • i: var • a: var work • a: var • work: function Program
  • 24. Hashtable var a; function work (p) { var i; { var a; let l; } } Symbol Type a_program var work_program function i_work var a_work var l_work_inner var
  • 25. Exemple de AST function factorial (n) // make new context (function) { // add variable n to conext var f = 1; // add variable f to conext for (var i=1; i < n; i++) // make new context (for), //add variable i to context (function) f = f * i; // destroy context (for) return f; // destroy context (function) }
  • 26. Contexte statique et dynamique  Statique - a la compilation  C/C++  Java  Pascal  Dynamique – lors de l'exécution  Javascript  Python  Ruby
  • 27. Types  Type  Valeurs autorisées  Opérations autorisées  Types  Simple  int, float, double, char, bool  Composée  array, string, pointer, struct  Complexe  listes ,arbres
  • 28. Paramètres pour les type  Simple  Le type (int, char, float … )  Compose  struct  Liste avec les components  Nom  Type  array  Type des éléments  Numéro des éléments  Les index
  • 29. Les types sont pour  Constantes  Variables  Fonctions  Expressions  Instructions
  • 30. Langage et type • Dynamique vs. Statique • Ou est-ce que la vérification de type est effectuée? Exécution vs compilation • Strongly typed vs. Weakly typed • Que se passe-t-il si les types ne correspondent pas? Erreur vs. conversion
  • 31. Vérification de type  Synthèse  Détermination de type pour un instruction  Expression  Overloading  Inférence  Détermine un type dans le contexte
  • 32. Equivalence de types compose  Un arbre pour l’information de type  Nom  Structure  Vérifiez de façon récursive que l'arbre correspond
  • 33. Inférence de type  Déduction de type pour un expression dans le contexte  A compilation ou a exécution.  C’est important  Vérification de type  Overloading de fonction  Conversion implicite  Widening / Narrowing
  • 34. Sujets • Définition dirigée par syntaxe (SDD) • Types • Arbre de syntaxe abstraite • Analyse sémantique

Notes de l'éditeur

  1. Pasii de analiza – o serie de filtre Tipurile de gramatici
  2. A "statically-typed" language is a language designed to facilitate automatic correctness checking by a tool that has access to only the source code, not the running state of the program. The facts that are deduced by the tool are called "types." The language designers produce a set of rules about what makes a program "type safe," and the tool seeks to prove that the program follows those rules; if it does not then it produces a type error. A "dynamically-typed" language by contrast is one not designed to facilitate this kind of checking. The meaning of the data stored in any particular location can only be easily determined by inspection while the program is running.