Update cours theorie des langages et compilation
This commit is contained in:
parent
1eb33a61a0
commit
bd86db1c1f
|
@ -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$
|
||||
|
|
|
@ -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 < <em>i</em> < <em>k</em></span></li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
|
|
Loading…
Reference in New Issue