Grammaire hors contexte

Discutez d'informatique ici !
emmesse
Messages: 3
Enregistré le: 08 Oct 2018, 08:48

grammaire hors contexte

par emmesse » 08 Oct 2018, 10:20

bonjour,

nous allons parler de grammaires hors contextes (grammaire LL) qui servent à concevoir un compilateur.
Je me suis aperçu que la grammaire ci-dessous est ambiguë
Code: Tout sélectionner
D  ->  d D'
D' ->  ; d D'
D' -> epsilone
S  -> i S'
S' -> ; i S'
I' -> epsilone
C  -> D ; S

en effet, les deux productions pour D' se trouvent, dans la table d'analyse (LL), à la même ligne (D') et la même colonne (';'). Je pense alors que cette grammaire est meilleure:
Code: Tout sélectionner
C -> d D
C -> S
C -> epsilone
D -> ; C
D -> epsilone

pour la DDS, je verrais ceci:
Code: Tout sélectionner
C -> d D        | C.val = D.s
                | D.h = d.code
C -> S          | C.val = S.code
C -> epsilone   | C.val = chaîne vide
D -> ; C        | D.h = D1.h || C.code
D -> epsilone   | D.s = D.h

cette grammaire et cette dds pour deux listes séparé avec le même séparateur est-elle correcte?
quelqu'un a une idée?



emmesse
Messages: 3
Enregistré le: 08 Oct 2018, 08:48

Re: grammaire hors contexte

par emmesse » 08 Oct 2018, 12:08

bonjour,

cette grammaire ne fait pas exactement ce que j'attends car elle se termine par un point-virgule, ce que je ne souhaite pas. Je l'ai donc modifiée:
Code: Tout sélectionner
C     -> d D
C     -> S
C     -> epsilone
D     -> ; Cobli
D     -> epsilone
Cobli -> d D
Cobli -> S

la dds est:
Code: Tout sélectionner
C      -> d D       |  C.val = D.s
                    |  D.h = d.code
C      -> S         |  C.val = S.code
C      -> epsilone  |  C.val = chaîne vide
D      -> ; Cobli   |  D.h=D1.h || Cobli.code
D      -> epsilone  |  D.s = D.h
Cobli  -> d D       |  Cobli.val = D.s
                    |  D.h = d.code
Cobli  -> S         |  Cobli.val = S.code


et voici le STDS:
Code: Tout sélectionner
C     -> d { D.h = d.code } D { C.val = D.s }
C     -> S { C.val = S.code }
C     -> epsilone { C.val=chaîne vide }
D     -> ; Cobli { D.h = D1.h || Cobli.code }
D     -> epsilone { D.s = D.h }
Cobli -> d { D.h = d. code } D { Cobli.val = D.s }
Cobli -> S { Cobli.val = S.code}


pensez-vous que ceci est correct?

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite