9 octobre 2007cours de compilation 5 - intranet1 cours de compilation techniques danalyse...

Download 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

Post on 03-Apr-2015

111 views

Category:

Documents

5 download

Embed Size (px)

TRANSCRIPT

  • Page 1
  • 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes
  • Page 2
  • 9 octobre 2007Cours de compilation 5 - Intranet2 Les grandes lignes du cours Dfinitions de base Dfinitions de base Composition de compilateurs Composition de compilateurs Lenvironnement dun compilateur Lenvironnement dun compilateur Evaluation partielle et compilation Evaluation partielle et compilation Analyses lexicales et syntaxiques Analyses lexicales et syntaxiques Techniques danalyse descendantes Techniques danalyse descendantes Techniques danalyse ascendantes Techniques danalyse ascendantes YACC YACC Analyse smantique Analyse smantique Environnement dexcution Environnement dexcution Gnration de code Gnration de code Optimisation de code Optimisation de code
  • Page 3
  • 9 octobre 2007Cours de compilation 5 - Intranet3 U N E G R A M M A I R E N O N L L ( K )
  • Page 4
  • 9 octobre 2007Cours de compilation 5 - Intranet4 Une grammaire non LL ( k ) ---------------------------------------------------------------- En TD, nous avons dmontr que la grammaire des expressions arithmtiques ci-dessous gauche est LL ( 1 ) :En TD, nous avons dmontr que la grammaire des expressions arithmtiques ci-dessous gauche est LL ( 1 ) : A ::= T E E ::= + T E | E ::= + T E | T ::= F T T ::= * F T | T ::= * F T | F ::= id | ( A )
  • Page 5
  • 9 octobre 2007Cours de compilation 5 - Intranet5 Une grammaire non LL ( k ) ---------------------------------------------------------------- En TD, nous avons dmontr que la grammaire des expressions arithmtiques ci-dessous gauche est LL ( 1 ) :En TD, nous avons dmontr que la grammaire des expressions arithmtiques ci-dessous gauche est LL ( 1 ) : Il en est de mme pour la grammaire ci-dessous droite qui est celles des expressions logiques :Il en est de mme pour la grammaire ci-dessous droite qui est celles des expressions logiques : A ::= T E L ::= D H E ::= + T E | H ::= v D H | E ::= + T E | H ::= v D H | T ::= F T D ::= C I T ::= * F T | I ::= C I | T ::= * F T | I ::= C I | F ::= id | ( A ) C ::= id | ( E ) v
  • Page 6
  • 9 octobre 2007Cours de compilation 5 - Intranet6 Une grammaire non LL ( k ) ---------------------------------------------------------------- En TD, nous avons dmontr que la grammaire des expressions arithmtiques ci-dessous gauche est LL ( 1 ) :En TD, nous avons dmontr que la grammaire des expressions arithmtiques ci-dessous gauche est LL ( 1 ) : Il en est de mme pour la grammaire ci-dessous droite qui est celles des expressions logiques :Il en est de mme pour la grammaire ci-dessous droite qui est celles des expressions logiques : En combinant les expressions arithmtiques et logiques, nous ne sommes plus LL ( k ) pour aucun k :En combinant les expressions arithmtiques et logiques, nous ne sommes plus LL ( k ) pour aucun k : A ::= T E L ::= D H E ::= + T E | H ::= v D H | E ::= + T E | H ::= v D H | T ::= F T D ::= C I T ::= * F T | I ::= C I | T ::= * F T | I ::= C I | F ::= id | ( A ) C ::= id | ( E ) v | A = A
  • Page 7
  • 9 octobre 2007Cours de compilation 5 - Intranet7 Une grammaire non LL ( k ) ---------------------------------------------------------------- En TD, nous avons dmontr que la grammaire des expressions arithmtiques ci-dessous gauche est LL ( 1 ) :En TD, nous avons dmontr que la grammaire des expressions arithmtiques ci-dessous gauche est LL ( 1 ) : Il en est de mme pour la grammaire ci-dessous droite qui est celles des expressions logiques :Il en est de mme pour la grammaire ci-dessous droite qui est celles des expressions logiques : En combinant les expressions arithmtiques et logiques, nous ne sommes plus LL ( k ) pour aucun k :En combinant les expressions arithmtiques et logiques, nous ne sommes plus LL ( k ) pour aucun k : A ::= T E L ::= D H E ::= + T E | H ::= v D H | E ::= + T E | H ::= v D H | T ::= F T D ::= C I T ::= * F T | I ::= C I | T ::= * F T | I ::= C I | F ::= id | ( A ) C ::= id | ( E ) v | A = A
  • Page 8
  • 9 octobre 2007Cours de compilation 5 - Intranet8 Une grammaire non LL ( k ) ---------------------------------------------------------------- Il y a problme pour la rgleIl y a problme pour la rgle C ::= id | ( E ) | A = A C ::= id | ( E ) | A = A
  • Page 9
  • 9 octobre 2007Cours de compilation 5 - Intranet9 Une grammaire non LL ( k ) ---------------------------------------------------------------- Il y a problme pour la rgleIl y a problme pour la rgle C ::= id | ( E ) | A = A C ::= id | ( E ) | A = A car ( Prem ( ( E ) ) v Prem ( A = A ) car ( Prem ( ( E ) ) v Prem ( A = A )
  • Page 10
  • 9 octobre 2007Cours de compilation 5 - Intranet10 Une grammaire non LL ( k ) ---------------------------------------------------------------- Il y a problme pour la rgleIl y a problme pour la rgle C ::= id | ( E ) | A = A C ::= id | ( E ) | A = A car ( Prem ( ( E ) ) v Prem ( A = A ) car ( Prem ( ( E ) ) v Prem ( A = A ) Il y a des parenthses arithmtiques et des parenthses logiques :Il y a des parenthses arithmtiques et des parenthses logiques : ( ( A + B ) = C v... ) ( ( A + B ) = C v... )
  • Page 11
  • 9 octobre 2007Cours de compilation 5 - Intranet11 Une grammaire non LL ( k ) ---------------------------------------------------------------- Il y a problme pour la rgleIl y a problme pour la rgle C ::= id | ( E ) | A = A C ::= id | ( E ) | A = A car ( Prem ( ( E ) ) v Prem ( A = A ) car ( Prem ( ( E ) ) v Prem ( A = A ) Il y a des parenthses arithmtiques et des parenthses logiques :Il y a des parenthses arithmtiques et des parenthses logiques : ( ( A + B ) = C v... ) ( ( A + B ) = C v... )
  • Page 12
  • 9 octobre 2007Cours de compilation 5 - Intranet12 Une grammaire non LL ( k ) ---------------------------------------------------------------- Il y a problme pour la rgleIl y a problme pour la rgle C ::= id | ( E ) | A = A C ::= id | ( E ) | A = A car ( Prem ( ( E ) ) v Prem ( A = A ) car ( Prem ( ( E ) ) v Prem ( A = A ) Il y a des parenthses arithmtiques et des parenthses logiques :Il y a des parenthses arithmtiques et des parenthses logiques : ( ( A + B ) = C v... ) ( ( A + B ) = C v... )
  • Page 13
  • 9 octobre 2007Cours de compilation 5 - Intranet13 Une grammaire non LL ( k ) ---------------------------------------------------------------- Il y a problme pour la rgleIl y a problme pour la rgle C ::= id | ( E ) | A = A C ::= id | ( E ) | A = A car ( Prem ( ( E ) ) v Prem ( A = A ) car ( Prem ( ( E ) ) v Prem ( A = A ) Il y a des parenthses arithmtiques et des parenthses logiques :Il y a des parenthses arithmtiques et des parenthses logiques : ( ( A + B ) = C v... ) ( ( A + B ) = C v... ) Il peut y avoir plus que k parenthses ouvrantes, quelle que soit la valeur de k !Il peut y avoir plus que k parenthses ouvrantes, quelle que soit la valeur de k !
  • Page 14
  • 9 octobre 2007Cours de compilation 5 - Intranet14 Une grammaire non LL ( k ) ---------------------------------------------------------------- Il y a problme pour la rgleIl y a problme pour la rgle C ::= id | ( E ) | A = A C ::= id | ( E ) | A = A car ( Prem ( ( E ) ) v Prem ( A = A ) car ( Prem ( ( E ) ) v Prem ( A = A ) Il y a des parenthses arithmtiques et des parenthses logiques :Il y a des parenthses arithmtiques et des parenthses logiques : ( ( A + B ) = C v... ) ( ( A + B ) = C v... ) Il peut y avoir plus que k parenthses ouvrantes, quelle que soit la valeur de k !Il peut y avoir plus que k parenthses ouvrantes, quelle que soit la valeur de k !
  • Page 15
  • 9 octobre 2007Cours de compilation 5 - Intranet15 R E C U P E R A T I O N S U R E R R E U R
  • Page 16
  • 9 octobre 2007Cours de compilation 5 - Intranet16 Rcupration sur erreur ---------------------------------------------------------------- Soit :Soit : Inst M_gauche=Expr
  • Page 17
  • 9 octobre 2007Cours de compilation 5 - Intranet17 Rcupration sur erreur ---------------------------------------------------------------- Soit :Soit : Inst M_gauche=Expr
  • Page 18
  • 9 octobre 2007Cours de compilation 5 - Intranet18 Rcupration sur erreur ---------------------------------------------------------------- Soit :Soit : Ou reprendre ? Ou reprendre ? Comment interprter ? Comment interprter ? Inst M_gauche=Expr
  • Page 19
  • 9 octobre 2007Cours de compilation 5 - Intranet19 Rcupration sur erreur ---------------------------------------------------------------- Soit :Soit : Ou reprendre ? Ou reprendre ? Comment interprter ? Comment interprter ?... [... ( 5 + -...... [... ( 5 + -... Inst M_gauche=Expr
  • Page 20
  • 9 octobre 2007Cours de compilation 5 - Intranet20 Rcupration sur erreur ---------------------------------------------------------------- Soit :Soit : Ou reprendre ? Ou reprendre ? Comment interprter ? Comment interprter ?... [... ( 5 + -... )...... [... ( 5 + -... )... Inst M_gauche=Expr Cherchez la parenthse fermante ! Si elle existe ! ! !
  • Page 21
  • 9 octobre 2007Cours de compilation 5 - Intranet21 Rcupration sur erreur ---------------------------------------------------------------- Soit :Soit : Ou reprendre ? Ou reprendre ? Comment interprter ? Comment interprter ?... [... ( 5 + -...... ]...... [... ( 5 + -...... ]... Inst M_gauche=Expr Cherchez le crochet fermant ! Sil existe ! ! !
  • Page 22
  • 9 octobre 2007Cours de compilation 5 - Intranet22 Rcupration sur erreur ---------------------------------------------------------------- Soit :Soit : Ou reprendre ?

Recommended

View more >