SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
Les compilateurs... comment ça marche ?
Dinesh Bolkensteyn
@dbolkensteyn
14 janvier 2014
La face visible
public static <T> Collection<T>
identity(Collection<?> param) {
return param;
}
La face visible
public static <T> Collection<T>
identity(Collection<?> param) {
return param;
}
incompatible types
found

: java.util.Collection<capture#42 of ?>

required: java.util.Collection<T>
Ou moins visible...
Ou moins visible...
Architecture
Front End
●
●

Back End

Syntaxe

Sémantique

●
●

Optimisation

Génération de code
Front End
1. Lexer
2. Parser
3. Résolution des noms
4. Vérification des types
Front End : Lexer
foo + 42 * bar
Front End : Lexer
foo + 42 * bar

1. ID(« foo »)
2. PLUS(« + »)
3. INTEGER(« 42 »)
4. STAR(« * »)
5. ID(« bar »)
Front End : Lexer
foo + 42 * bar

Expressions régulières
●

●

1. ID(« foo »)
2. PLUS(« + »)
3. INTEGER(« 42 »)
4. STAR(« * »)
5. ID(« bar »)

ID : [a-zA-Z][a-zA-Z0-9]*+
INTEGER : [0-9]++

●

PLUS : +

●

STAR : *

●

WHITESPACES : [ rn]++
Front End : Parser
foo + 42 * bar
Front End : Parser
foo + 42 * bar
Front End : Parser
foo + 42 * bar

Grammaire formelle
●

ADD :=
MUL {PLUS MUL}
MUL

●

MUL :=
PRIM {STAR PRIM}
PRIM

●

PRIM := ID | INTEGER
Front End : Parser
foo + 42 * bar

Fonctions récursives
add() {
Expr left = mul() ;
accept(PLUS) ;
Expr right = mul() ;
return new Add(
left, right)
}
Front End : Résolution des noms
class Example {
public Example(
int foo) {
this.foo =
foo;
}
int foo;
}
Front End : Résolution des noms
class Example {
public Example(

Phase 1:
Class(

int foo) {

fields => { foo }

this.foo =

constructors = {
Constructor(

foo;

parameters = { foo }

}

)

int foo;
}

}
)
Front End : Résolution des noms
class Example {
public Example(

Résultat phase 1:
Class(
fields => { foo }

int foo) {

constructors = {

this.foo = // field

Constructor(

foo; // parameter

parameters = { foo }

}

)

int foo;
}

}
)
Front End : Vérifications des types
int a = 0 ; // OK
int a = 10 / 3 ; // OK
int a = 10.0 / 3 ; // KO
Front End : Vérifications des types
int a = 0 ; // OK
int a = 10 / 3 ; // OK

Règles de type
●

int a = 10.0 / 3 ; // KO

e1 : int, e2 : int
-> e1 + e2 : int

●

e1 : double, e2 : int
-> e1 + e2 : double

●

etc.
Back End
1. Optimisation
2. Génération de code
Et ça va bien plus loin...
●

Inférence des types: val foo = ... ;

●

C++ template « meta-programming » :
template <int I>
int recursive(void) {
return recursive<I - 1>();
}
Merci !

Les compilateurs... comment ça marche ?
Dinesh Bolkensteyn
@dbolkensteyn

Mais conteúdo relacionado

Mais procurados

Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionECAM Brussels Engineering School
 
Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)Innobec
 
Lect14 dev2
Lect14 dev2Lect14 dev2
Lect14 dev2moisko
 
Presentation Csharp et winforms
Presentation Csharp et winformsPresentation Csharp et winforms
Presentation Csharp et winformsChristophe Zome
 
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
 
Résumer sur les fichier et les enregistrement
Résumer sur les fichier et les enregistrementRésumer sur les fichier et les enregistrement
Résumer sur les fichier et les enregistrementborhen boukthir
 
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 controlleAlexandru Radovici
 
Les fondamentaux du langage C
Les fondamentaux du langage CLes fondamentaux du langage C
Les fondamentaux du langage CAbdoulaye Dieng
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French CourseHaytam EL YOUSSFI
 
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 fonctionAlexandru Radovici
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simplesPethrvs
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationECAM Brussels Engineering School
 
Return Type Declaration
Return Type DeclarationReturn Type Declaration
Return Type DeclarationDarkmira
 

Mais procurados (20)

ALF 11 - WebAssembly
ALF 11 - WebAssemblyALF 11 - WebAssembly
ALF 11 - WebAssembly
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
 
Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)
 
Python avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codagePython avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codage
 
Lect14 dev2
Lect14 dev2Lect14 dev2
Lect14 dev2
 
Héritage et redéfinition de méthode
Héritage et redéfinition de méthodeHéritage et redéfinition de méthode
Héritage et redéfinition de méthode
 
Presentation Csharp et winforms
Presentation Csharp et winformsPresentation Csharp et winforms
Presentation Csharp et winforms
 
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
 
Résumer sur les fichier et les enregistrement
Résumer sur les fichier et les enregistrementRésumer sur les fichier et les enregistrement
Résumer sur les fichier et les enregistrement
 
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
 
C++ 11/14
C++ 11/14C++ 11/14
C++ 11/14
 
Les fondamentaux du langage C
Les fondamentaux du langage CLes fondamentaux du langage C
Les fondamentaux du langage C
 
Tests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnitTests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnit
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
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
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simples
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
 
Return Type Declaration
Return Type DeclarationReturn Type Declaration
Return Type Declaration
 
ALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-UpALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-Up
 

Destaque

El valioso tiempo_de_los_maduros
El valioso tiempo_de_los_madurosEl valioso tiempo_de_los_maduros
El valioso tiempo_de_los_madurosDavid Lopez
 
Boletín de la Alcaldía de Palmira 104 (viernes 25 de mayo)
Boletín de la Alcaldía de Palmira 104  (viernes 25 de mayo)Boletín de la Alcaldía de Palmira 104  (viernes 25 de mayo)
Boletín de la Alcaldía de Palmira 104 (viernes 25 de mayo)Luis Fernando Tascón Montes
 
Boletin de la Alcaldia de Palmira No 121 (jueves 21 de junio) por La Hora de ...
Boletin de la Alcaldia de Palmira No 121 (jueves 21 de junio) por La Hora de ...Boletin de la Alcaldia de Palmira No 121 (jueves 21 de junio) por La Hora de ...
Boletin de la Alcaldia de Palmira No 121 (jueves 21 de junio) por La Hora de ...Luis Fernando Tascón Montes
 
Articulacion temporomandibular
Articulacion temporomandibularArticulacion temporomandibular
Articulacion temporomandibularNadia Ordenes
 
Casos practicos business contacts relations. Azukre it Consulting.
Casos practicos business contacts relations. Azukre it Consulting.Casos practicos business contacts relations. Azukre it Consulting.
Casos practicos business contacts relations. Azukre it Consulting.José Javier Agote
 
Top15 annee2013
Top15 annee2013Top15 annee2013
Top15 annee2013Krysboy
 
Presentaciones
PresentacionesPresentaciones
Presentacioneselviahope
 
Victor klemperer lti - la langue du ii ie reich (1947)
Victor klemperer   lti - la langue du ii ie reich (1947)Victor klemperer   lti - la langue du ii ie reich (1947)
Victor klemperer lti - la langue du ii ie reich (1947)manangel12
 
La funció de nutrició (3r ESO)
La funció de nutrició (3r ESO)La funció de nutrició (3r ESO)
La funció de nutrició (3r ESO)lidiasibat
 
Copyright: El mundo bajo licencia.
Copyright: El mundo bajo licencia.Copyright: El mundo bajo licencia.
Copyright: El mundo bajo licencia.Juan Novelo
 
Mi regalo de navidad
Mi regalo de navidadMi regalo de navidad
Mi regalo de navidadFiona Ramirez
 
Resultat du Sondage sur la creation des comptes bancaires en Guinee
Resultat du Sondage sur la creation des comptes bancaires en GuineeResultat du Sondage sur la creation des comptes bancaires en Guinee
Resultat du Sondage sur la creation des comptes bancaires en GuineeInstitut guineen de sondage
 
Boletin 168 de la Alcaldia de Palmira por La Hora de Palmira(viernes 31 de ag...
Boletin 168 de la Alcaldia de Palmira por La Hora de Palmira(viernes 31 de ag...Boletin 168 de la Alcaldia de Palmira por La Hora de Palmira(viernes 31 de ag...
Boletin 168 de la Alcaldia de Palmira por La Hora de Palmira(viernes 31 de ag...Luis Fernando Tascón Montes
 
La Clase Emprendedora por Carlos Barrabés. Conferencia orgnizada por EOI y FE...
La Clase Emprendedora por Carlos Barrabés. Conferencia orgnizada por EOI y FE...La Clase Emprendedora por Carlos Barrabés. Conferencia orgnizada por EOI y FE...
La Clase Emprendedora por Carlos Barrabés. Conferencia orgnizada por EOI y FE...FENA Business School
 
Drill Test Semaine 7
Drill Test Semaine 7Drill Test Semaine 7
Drill Test Semaine 7GE 94
 

Destaque (20)

El valioso tiempo_de_los_maduros
El valioso tiempo_de_los_madurosEl valioso tiempo_de_los_maduros
El valioso tiempo_de_los_maduros
 
Boletín de la Alcaldía de Palmira 104 (viernes 25 de mayo)
Boletín de la Alcaldía de Palmira 104  (viernes 25 de mayo)Boletín de la Alcaldía de Palmira 104  (viernes 25 de mayo)
Boletín de la Alcaldía de Palmira 104 (viernes 25 de mayo)
 
Boletin de la Alcaldia de Palmira No 121 (jueves 21 de junio) por La Hora de ...
Boletin de la Alcaldia de Palmira No 121 (jueves 21 de junio) por La Hora de ...Boletin de la Alcaldia de Palmira No 121 (jueves 21 de junio) por La Hora de ...
Boletin de la Alcaldia de Palmira No 121 (jueves 21 de junio) por La Hora de ...
 
Articulacion temporomandibular
Articulacion temporomandibularArticulacion temporomandibular
Articulacion temporomandibular
 
Casos practicos business contacts relations. Azukre it Consulting.
Casos practicos business contacts relations. Azukre it Consulting.Casos practicos business contacts relations. Azukre it Consulting.
Casos practicos business contacts relations. Azukre it Consulting.
 
Top15 annee2013
Top15 annee2013Top15 annee2013
Top15 annee2013
 
Presentaciones
PresentacionesPresentaciones
Presentaciones
 
Victor klemperer lti - la langue du ii ie reich (1947)
Victor klemperer   lti - la langue du ii ie reich (1947)Victor klemperer   lti - la langue du ii ie reich (1947)
Victor klemperer lti - la langue du ii ie reich (1947)
 
La funció de nutrició (3r ESO)
La funció de nutrició (3r ESO)La funció de nutrició (3r ESO)
La funció de nutrició (3r ESO)
 
Copyright: El mundo bajo licencia.
Copyright: El mundo bajo licencia.Copyright: El mundo bajo licencia.
Copyright: El mundo bajo licencia.
 
Mi regalo de navidad
Mi regalo de navidadMi regalo de navidad
Mi regalo de navidad
 
Ventriloquia
VentriloquiaVentriloquia
Ventriloquia
 
Resultat du Sondage sur la creation des comptes bancaires en Guinee
Resultat du Sondage sur la creation des comptes bancaires en GuineeResultat du Sondage sur la creation des comptes bancaires en Guinee
Resultat du Sondage sur la creation des comptes bancaires en Guinee
 
Generación Net. Dr Gustavo Faingenbaum
Generación Net. Dr Gustavo FaingenbaumGeneración Net. Dr Gustavo Faingenbaum
Generación Net. Dr Gustavo Faingenbaum
 
Práctica de word
Práctica de wordPráctica de word
Práctica de word
 
Boletin 168 de la Alcaldia de Palmira por La Hora de Palmira(viernes 31 de ag...
Boletin 168 de la Alcaldia de Palmira por La Hora de Palmira(viernes 31 de ag...Boletin 168 de la Alcaldia de Palmira por La Hora de Palmira(viernes 31 de ag...
Boletin 168 de la Alcaldia de Palmira por La Hora de Palmira(viernes 31 de ag...
 
La Clase Emprendedora por Carlos Barrabés. Conferencia orgnizada por EOI y FE...
La Clase Emprendedora por Carlos Barrabés. Conferencia orgnizada por EOI y FE...La Clase Emprendedora por Carlos Barrabés. Conferencia orgnizada por EOI y FE...
La Clase Emprendedora por Carlos Barrabés. Conferencia orgnizada por EOI y FE...
 
5 la madre tierra 1
5 la madre tierra 15 la madre tierra 1
5 la madre tierra 1
 
Del macacoalmac
Del macacoalmacDel macacoalmac
Del macacoalmac
 
Drill Test Semaine 7
Drill Test Semaine 7Drill Test Semaine 7
Drill Test Semaine 7
 

Semelhante a Un compilateur... comment ça marche?

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 mouvementsDidier Plaindoux
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdframadanmahdi
 
Annotation Java vs. Decorator Python
Annotation Java vs. Decorator PythonAnnotation Java vs. Decorator Python
Annotation Java vs. Decorator PythonDidier Plaindoux
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018salah fenni
 
cour de compilation
cour de compilation cour de compilation
cour de compilation Ens Kouba
 
Cours C Avancé chapitre 2 et chapitre.pdf
Cours C Avancé  chapitre 2 et chapitre.pdfCours C Avancé  chapitre 2 et chapitre.pdf
Cours C Avancé chapitre 2 et chapitre.pdfc79024186
 
Théorie des langages - 01 - Compilation
Théorie des langages - 01 - CompilationThéorie des langages - 01 - Compilation
Théorie des langages - 01 - CompilationYann Caron
 
Introduction au langage python notion de base
Introduction au langage python notion de baseIntroduction au langage python notion de base
Introduction au langage python notion de basemohamedAitomar1
 
Introduction au langage python (Notion de base)
Introduction au langage python (Notion de base)Introduction au langage python (Notion de base)
Introduction au langage python (Notion de base)mohamedAitomar1
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptxolfaharrabi2
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Loic Yon
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6Julien CROUZET
 
Algorithmique Amp Programmation (R Sum
Algorithmique  Amp  Programmation (R SumAlgorithmique  Amp  Programmation (R Sum
Algorithmique Amp Programmation (R SumAmy Isleb
 
Cours langage c
Cours langage cCours langage c
Cours langage ccoursuniv
 
ESGAE_C#_2021-2024 Cours Avancé (('.pptx
ESGAE_C#_2021-2024 Cours Avancé (('.pptxESGAE_C#_2021-2024 Cours Avancé (('.pptx
ESGAE_C#_2021-2024 Cours Avancé (('.pptxLagloireSouamounou
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech daysJean-Pierre Vincent
 

Semelhante a Un compilateur... comment ça marche? (20)

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
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdf
 
Change mind about JS
Change mind about JSChange mind about JS
Change mind about JS
 
Annotation Java vs. Decorator Python
Annotation Java vs. Decorator PythonAnnotation Java vs. Decorator Python
Annotation Java vs. Decorator Python
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018
 
Ch04
Ch04Ch04
Ch04
 
cour de compilation
cour de compilation cour de compilation
cour de compilation
 
Ruby Pour RoR
Ruby Pour RoRRuby Pour RoR
Ruby Pour RoR
 
Cours C Avancé chapitre 2 et chapitre.pdf
Cours C Avancé  chapitre 2 et chapitre.pdfCours C Avancé  chapitre 2 et chapitre.pdf
Cours C Avancé chapitre 2 et chapitre.pdf
 
Théorie des langages - 01 - Compilation
Théorie des langages - 01 - CompilationThéorie des langages - 01 - Compilation
Théorie des langages - 01 - Compilation
 
Introduction au langage python notion de base
Introduction au langage python notion de baseIntroduction au langage python notion de base
Introduction au langage python notion de base
 
Introduction au langage python (Notion de base)
Introduction au langage python (Notion de base)Introduction au langage python (Notion de base)
Introduction au langage python (Notion de base)
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptx
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 
Algorithmique Amp Programmation (R Sum
Algorithmique  Amp  Programmation (R SumAlgorithmique  Amp  Programmation (R Sum
Algorithmique Amp Programmation (R Sum
 
Cours langage c
Cours langage cCours langage c
Cours langage c
 
Université des langages scala
Université des langages   scalaUniversité des langages   scala
Université des langages scala
 
ESGAE_C#_2021-2024 Cours Avancé (('.pptx
ESGAE_C#_2021-2024 Cours Avancé (('.pptxESGAE_C#_2021-2024 Cours Avancé (('.pptx
ESGAE_C#_2021-2024 Cours Avancé (('.pptx
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
 

Un compilateur... comment ça marche?

  • 1. Les compilateurs... comment ça marche ? Dinesh Bolkensteyn @dbolkensteyn 14 janvier 2014
  • 2. La face visible public static <T> Collection<T> identity(Collection<?> param) { return param; }
  • 3. La face visible public static <T> Collection<T> identity(Collection<?> param) { return param; } incompatible types found : java.util.Collection<capture#42 of ?> required: java.util.Collection<T>
  • 7. Front End 1. Lexer 2. Parser 3. Résolution des noms 4. Vérification des types
  • 8. Front End : Lexer foo + 42 * bar
  • 9. Front End : Lexer foo + 42 * bar 1. ID(« foo ») 2. PLUS(« + ») 3. INTEGER(« 42 ») 4. STAR(« * ») 5. ID(« bar »)
  • 10. Front End : Lexer foo + 42 * bar Expressions régulières ● ● 1. ID(« foo ») 2. PLUS(« + ») 3. INTEGER(« 42 ») 4. STAR(« * ») 5. ID(« bar ») ID : [a-zA-Z][a-zA-Z0-9]*+ INTEGER : [0-9]++ ● PLUS : + ● STAR : * ● WHITESPACES : [ rn]++
  • 11. Front End : Parser foo + 42 * bar
  • 12. Front End : Parser foo + 42 * bar
  • 13. Front End : Parser foo + 42 * bar Grammaire formelle ● ADD := MUL {PLUS MUL} MUL ● MUL := PRIM {STAR PRIM} PRIM ● PRIM := ID | INTEGER
  • 14. Front End : Parser foo + 42 * bar Fonctions récursives add() { Expr left = mul() ; accept(PLUS) ; Expr right = mul() ; return new Add( left, right) }
  • 15. Front End : Résolution des noms class Example { public Example( int foo) { this.foo = foo; } int foo; }
  • 16. Front End : Résolution des noms class Example { public Example( Phase 1: Class( int foo) { fields => { foo } this.foo = constructors = { Constructor( foo; parameters = { foo } } ) int foo; } } )
  • 17. Front End : Résolution des noms class Example { public Example( Résultat phase 1: Class( fields => { foo } int foo) { constructors = { this.foo = // field Constructor( foo; // parameter parameters = { foo } } ) int foo; } } )
  • 18. Front End : Vérifications des types int a = 0 ; // OK int a = 10 / 3 ; // OK int a = 10.0 / 3 ; // KO
  • 19. Front End : Vérifications des types int a = 0 ; // OK int a = 10 / 3 ; // OK Règles de type ● int a = 10.0 / 3 ; // KO e1 : int, e2 : int -> e1 + e2 : int ● e1 : double, e2 : int -> e1 + e2 : double ● etc.
  • 20. Back End 1. Optimisation 2. Génération de code
  • 21. Et ça va bien plus loin... ● Inférence des types: val foo = ... ; ● C++ template « meta-programming » : template <int I> int recursive(void) { return recursive<I - 1>(); }
  • 22. Merci ! Les compilateurs... comment ça marche ? Dinesh Bolkensteyn @dbolkensteyn