Update cours theorie des langages et compilation

This commit is contained in:
xdrm-brackets 2017-01-27 16:37:06 +01:00
parent 1eb33a61a0
commit bd86db1c1f
2 changed files with 145 additions and 41 deletions

View File

@ -4,7 +4,7 @@ Chapitre II - Grammaire
### Définitions
**Grammaire**
`Grammaire`
> Ensemble de règles permettant de générer des mots du langage sous forme de réécriture (on remplace une séquence par une autre).
>
@ -15,7 +15,25 @@ Chapitre II - Grammaire
> * $P$ est un ensemble de **règles de production**, de la forme $\alpha\rightarrow\beta$ avec $\alpha\in(N\cup T)^+$ et $\beta\in(N\cup T)^*$
> * $S$ est le symbole de départ appelé **axiome**
##### Notations et remarques
`Mots générés par une grammaire`
> Soit $G=(N,T,P,S)$. Les mots générés (engendrés) par $G$ sont les mots $v\in T^*$ (symboles terminaux) qui peuvent être dérivés à partir de l'axiome $S:S\rightarrow*_Gv$
`Langage généré par une grammaire`
> On note $L(G)$ le langage généré par $G$
>
> C'est l'ensemble des mots que l'on peut définir à partir de l'axiome de $G$ en appliquant un nombre finis de fois des règles de $G$. $L(G) = \{v\in T^*,\ S\rightarrow*_Gv\}$
>
> **Exemple** Grammaire $G1$
>
> - $s\rightarrow aS$
> - $s\rightarrow bS$
> - $s\rightarrow a$
> - $s\rightarrow b$
> - $s\rightarrow \epsilon$
##### Notations
* Pour les caractères de $N$: on utilisera (habituellement) des majuscules.
* Pour les caractères de $T$: on utilisera (habituellement) des minuscules.
@ -23,7 +41,11 @@ Chapitre II - Grammaire
* L'axiome, noté $S$ (habituellement), est la base de la définition inductive, et c'est la racine de tout arbre de dérivation valide.
**Remarque:** Souvent on décrit une grammaire seulement par les règles.
##### Remarques
* Souvent on décrit une grammaire seulement par les règles.
* On peut avoir des règles de production dont la partie de droite est réduite à $\epsilon$ ; on appelera ces règles des **$\epsilon-productions$**
@ -31,12 +53,15 @@ Chapitre II - Grammaire
##### Règles de production
1. $P \rightarrow SVC$
2. $S \rightarrow G$
3. $C \rightarrow G$
4. $G \rightarrow AN$
5. $G \rightarrow ADN$
1. P $\rightarrow$ SVC
2. S $\rightarrow$ G
3. C $\rightarrow$ G
4. G $\rightarrow$ AN
5. G $\rightarrow$ ADN
6. N $\rightarrow$ fille | dame
7. A $\rightarrow$ la
8. D $\rightarrow$ vieille | petite
9. V $\rightarrow$ regarde
##### Dérivation d'une phrase (recherche de chemin)
@ -44,15 +69,42 @@ Chapitre II - Grammaire
**Etapes de dérivation:**
1. P $\rightarrow$ SG
2. $\rightarrow$ GVS
3. $\rightarrow$ ADNVC
4. $\rightarrow$ la DNVC
5. $\rightarrow$ la vieille NVC
6. $\rightarrow$ la vieille dame VC
7. $\rightarrow$ la vieille dame regarde C
8. $\rightarrow$ la vieille dame regarde G
9. $\rightarrow$ la vieille dame regarde ADN
10. $\rightarrow$ la vieille dame regarde la DN
11. $\rightarrow$ la vieille dame regarde la petite N
12. $\rightarrow$ la vieille dame regarde la petite fille
1. P $\rightarrow$ **SVC**
2. $\rightarrow$ **G**VC
3. $\rightarrow$ **ADN**VC
4. $\rightarrow$ **la** DNVC
5. $\rightarrow$ la **vieille** NVC
6. $\rightarrow$ la vieille **dame** VC
7. $\rightarrow$ la vieille dame **regarde** C
8. $\rightarrow$ la vieille dame regarde **G**
9. $\rightarrow$ la vieille dame regarde **ADN**
10. $\rightarrow$ la vieille dame regarde **la** DN
11. $\rightarrow$ la vieille dame regarde la **petite** N
12. $\rightarrow$ la vieille dame regarde la petite **fille**
### Dérivation
##### Dérivation du plus à gauche
> Une suite de dérivations obtenues en choisissant à chaque étape le symbole non terminal le plus à gauche.
##### Dérivation du plus à droite
> Une suite de dérivations obtenues en choisissant à chaque étape le symbole non terminal le plus à droite.
##### Dérivation en 1 étape
> Soit $G=(N,T,P,S)$ une grammaire. $G$ permet de **dériver** $v$ de $u$ **en une étape**, notée $u\rightarrow _Gv$, si et seulement si:
* $u=xu'v$
* $v=xv'v$
* $u'=v'$ est dans $P$
##### Dérivation en plusieurs étapes
> Soit $G=(N,T,P,S)$ une grammaire. $G$ permet de **dériver** $v$ de $u$ **en plusieurs étapes**, noté $u\rightarrow *_Gv$ si et seulement si il existe $k$ et $v_0,...,v_k$ tels que :
* $u=v_0$
* $v=v_k$
* $v_i\rightarrow v_{i+1}$ pour $0<i<k$

View File

@ -14,7 +14,7 @@
<body>
<h1 id="chapitre-ii---grammaire">Chapitre II - Grammaire</h1>
<h3 id="définitions">Définitions</h3>
<p><strong>Grammaire</strong></p>
<p><code>Grammaire</code></p>
<blockquote>
<p>Ensemble de règles permettant de générer des mots du langage sous forme de réécriture (on remplace une séquence par une autre).</p>
<p>Une grammaire est un quadruplet <span class="math inline"><em>G</em>=(<em>N</em>,<em>T</em>,<em>P</em>,<em>S</em>)</span> ou :</p>
@ -25,22 +25,47 @@
<li><span class="math inline"><em>S</em></span> est le symbole de départ appelé <strong>axiome</strong></li>
</ul>
</blockquote>
<h5 id="notations-et-remarques">Notations et remarques</h5>
<p><code>Mots générés par une grammaire</code></p>
<blockquote>
<p>Soit <span class="math inline"><em>G</em>=(<em>N</em>,<em>T</em>,<em>P</em>,<em>S</em>)</span>. Les mots générés (engendrés) par <span class="math inline"><em>G</em></span> sont les mots <span class="math inline"><em>v</em> ∈ <em>T</em><sup>*</sup></span> (symboles terminaux) qui peuvent être dérivés à partir de l'axiome <span class="math inline"><em>S</em>:<em>S</em> → *<sub><em>G</em></sub><em>v</em></span></p>
</blockquote>
<p><code>Langage généré par une grammaire</code></p>
<blockquote>
<p>On note <span class="math inline"><em>L</em>(<em>G</em>)</span> le langage généré par <span class="math inline"><em>G</em></span></p>
<p>C'est l'ensemble des mots que l'on peut définir à partir de l'axiome de <span class="math inline"><em>G</em></span> en appliquant un nombre finis de fois des règles de <span class="math inline"><em>G</em></span>. <span class="math inline"><em>L</em>(<em>G</em>)={<em>v</em> ∈ <em>T</em><sup>*</sup>, <em>S</em> → *<sub><em>G</em></sub><em>v</em>}</span></p>
<p><strong>Exemple</strong> Grammaire <span class="math inline"><em>G</em>1</span></p>
<ul>
<li><span class="math inline"><em>s</em> → <em>a</em><em>S</em></span></li>
<li><span class="math inline"><em>s</em> → <em>b</em><em>S</em></span></li>
<li><span class="math inline"><em>s</em> → <em>a</em></span></li>
<li><span class="math inline"><em>s</em> → <em>b</em></span></li>
<li><span class="math inline"><em>s</em> → <em>ϵ</em></span></li>
</ul>
</blockquote>
<h5 id="notations">Notations</h5>
<ul>
<li>Pour les caractères de <span class="math inline"><em>N</em></span>: on utilisera (habituellement) des majuscules.</li>
<li>Pour les caractères de <span class="math inline"><em>T</em></span>: on utilisera (habituellement) des minuscules.</li>
<li>Pour les règles de <span class="math inline"><em>P</em></span>, nos règles seront de la forme <span class="math inline"><em>X</em> → <em>β</em></span>, avec <span class="math inline"><em>X</em> ∈ <em>N</em></span> et <span class="math inline"><em>β</em> ∈ (<em>N</em><em>T</em>)<sup>*</sup></span></li>
<li>L'axiome, noté <span class="math inline"><em>S</em></span> (habituellement), est la base de la définition inductive, et c'est la racine de tout arbre de dérivation valide.</li>
</ul>
<p><strong>Remarque:</strong> Souvent on décrit une grammaire seulement par les règles.</p>
<h5 id="remarques">Remarques</h5>
<ul>
<li><p>Souvent on décrit une grammaire seulement par les règles.</p></li>
<li><p>On peut avoir des règles de production dont la partie de droite est réduite à <span class="math inline"><em>ϵ</em></span> ; on appelera ces règles des <strong><span class="math inline"><em>ϵ</em><em>p</em><em>r</em><em>o</em><em>d</em><em>u</em><em>c</em><em>t</em><em>i</em><em>o</em><em>n</em><em>s</em></span></strong></p></li>
</ul>
<h3 id="exemple">Exemple</h3>
<h5 id="règles-de-production">Règles de production</h5>
<ol type="1">
<li><span class="math inline"><em>P</em> → <em>S</em><em>V</em><em>C</em></span></li>
<li><span class="math inline"><em>S</em> → <em>G</em></span></li>
<li><span class="math inline"><em>C</em> → <em>G</em></span></li>
<li><span class="math inline"><em>G</em> → <em>A</em><em>N</em></span></li>
<li><span class="math inline"><em>G</em> → <em>A</em><em>D</em><em>N</em></span></li>
<li>P <span class="math inline"></span> SVC</li>
<li>S <span class="math inline"></span> G</li>
<li>C <span class="math inline"></span> G</li>
<li>G <span class="math inline"></span> AN</li>
<li>G <span class="math inline"></span> ADN</li>
<li>N <span class="math inline"></span> fille | dame</li>
<li>A <span class="math inline"></span> la</li>
<li>D <span class="math inline"></span> vieille | petite</li>
<li>V <span class="math inline"></span> regarde</li>
</ol>
<h5 id="dérivation-dune-phrase-recherche-de-chemin">Dérivation d'une phrase (recherche de chemin)</h5>
<blockquote>
@ -48,18 +73,45 @@
</blockquote>
<p><strong>Etapes de dérivation:</strong></p>
<ol type="1">
<li>P <span class="math inline"></span> SG</li>
<li><span class="math inline"></span> GVS</li>
<li><span class="math inline"></span> ADNVC</li>
<li><span class="math inline"></span> la DNVC</li>
<li><span class="math inline"></span> la vieille NVC</li>
<li><span class="math inline"></span> la vieille dame VC</li>
<li><span class="math inline"></span> la vieille dame regarde C</li>
<li><span class="math inline"></span> la vieille dame regarde G</li>
<li><span class="math inline"></span> la vieille dame regarde ADN</li>
<li><span class="math inline"></span> la vieille dame regarde la DN</li>
<li><span class="math inline"></span> la vieille dame regarde la petite N</li>
<li><span class="math inline"></span> la vieille dame regarde la petite fille</li>
<li>P <span class="math inline"></span> <strong>SVC</strong></li>
<li><span class="math inline"></span> <strong>G</strong>VC</li>
<li><span class="math inline"></span> <strong>ADN</strong>VC</li>
<li><span class="math inline"></span> <strong>la</strong> DNVC</li>
<li><span class="math inline"></span> la <strong>vieille</strong> NVC</li>
<li><span class="math inline"></span> la vieille <strong>dame</strong> VC</li>
<li><span class="math inline"></span> la vieille dame <strong>regarde</strong> C</li>
<li><span class="math inline"></span> la vieille dame regarde <strong>G</strong></li>
<li><span class="math inline"></span> la vieille dame regarde <strong>ADN</strong></li>
<li><span class="math inline"></span> la vieille dame regarde <strong>la</strong> DN</li>
<li><span class="math inline"></span> la vieille dame regarde la <strong>petite</strong> N</li>
<li><span class="math inline"></span> la vieille dame regarde la petite <strong>fille</strong></li>
</ol>
<h3 id="dérivation">Dérivation</h3>
<h5 id="dérivation-du-plus-à-gauche">Dérivation du plus à gauche</h5>
<blockquote>
<p>Une suite de dérivations obtenues en choisissant à chaque étape le symbole non terminal le plus à gauche.</p>
</blockquote>
<h5 id="dérivation-du-plus-à-droite">Dérivation du plus à droite</h5>
<blockquote>
<p>Une suite de dérivations obtenues en choisissant à chaque étape le symbole non terminal le plus à droite.</p>
</blockquote>
<h5 id="dérivation-en-1-étape">Dérivation en 1 étape</h5>
<blockquote>
<p>Soit <span class="math inline"><em>G</em>=(<em>N</em>,<em>T</em>,<em>P</em>,<em>S</em>)</span> une grammaire. <span class="math inline"><em>G</em></span> permet de <strong>dériver</strong> <span class="math inline"><em>v</em></span> de <span class="math inline"><em>u</em></span> <strong>en une étape</strong>, notée <span class="math inline"><em>u</em><sub><em>G</em></sub><em>v</em></span>, si et seulement si:</p>
</blockquote>
<ul>
<li><span class="math inline"><em>u</em>=<em>x</em><em>u</em><em>v</em></span></li>
<li><span class="math inline"><em>v</em>=<em>x</em><em>v</em><em>v</em></span></li>
<li><span class="math inline"><em>u</em>=<em>v</em></span> est dans <span class="math inline"><em>P</em></span></li>
</ul>
<h5 id="dérivation-en-plusieurs-étapes">Dérivation en plusieurs étapes</h5>
<blockquote>
<p>Soit <span class="math inline"><em>G</em>=(<em>N</em>,<em>T</em>,<em>P</em>,<em>S</em>)</span> une grammaire. <span class="math inline"><em>G</em></span> permet de <strong>dériver</strong> <span class="math inline"><em>v</em></span> de <span class="math inline"><em>u</em></span> <strong>en plusieurs étapes</strong>, noté <span class="math inline"><em>u</em> → *<sub><em>G</em></sub><em>v</em></span> si et seulement si il existe <span class="math inline"><em>k</em></span> et <span class="math inline"><em>v</em><sub>0</sub>,...,<em>v</em><sub><em>k</em></sub></span> tels que :</p>
</blockquote>
<ul>
<li><span class="math inline"><em>u</em>=<em>v</em><sub>0</sub></span></li>
<li><span class="math inline"><em>v</em>=<em>v</em><sub><em>k</em></sub></span></li>
<li><span class="math inline"><em>v</em><sub><em>i</em></sub> → <em>v</em><sub><em>i</em>+1</sub></span> pour <span class="math inline">0&lt;<em>i</em>&lt;<em>k</em></span></li>
</ul>
</body>
</html>