6

Cela fait quelques années que j'ai suivi mon cours de langue et j'ai donc oublié les subtilités des BNF et des EBNF et je n'ai pas de manuel à côté de moi. Plus précisément, j'ai oublié comment convertir un EBNF en BNF. De quoi peu je me souviens, je sais que l'un des principaux points est de convertir { term } en <term> | <many-terms>. Mais je ne me souviens pas des autres règles. J'ai essayé de rechercher ceci en ligne mais je peux seulement trouver des liens vers des questions de devoirs, ou un petit commentaire au sujet de convertir des termes avec des accolades. Je ne trouve pas de liste exhaustive de règles définissant la traduction.Convertir EBNF en BNF

Répondre

16

S'il vous plaît voir le lien ci-dessous, il contient des instructions pour chaque production qui doit être converti:

http://lampwww.epfl.ch/teaching/archive/compilation-ssc/2000/part4/parsing/node3.html

pour la construction de parseurs (en particulier, de haut en bas) une grammaire BNF est souvent mieux, que EBNF. Mais il est facile de convertir une grammaire EBNF à BNF:

  • Convertir chaque répétition { E } à un nouveau non-terminal X et ajouter

    X = ε | X E. 
    
  • Convertir toutes les options [ E ] à un nouveau non-terminal X et ajouter

    X = ε | E. 
    

    (Nous pouvons convertir X = A [ E ] B.-X = A E B | A B.)

  • Convertir chaque groupe (E) à un nouveau non-terminal X et ajouter

    X = E. 
    
  • On peut même faire disparaître des alternatives en ayant plusieurs productions avec le même non terminal.

    X = E | E'. devient X = E. X = E'.

+0

Parfait! C'est exactement ce dont j'ai besoin. Quelqu'un que je n'ai jamais trouvé ce lien! –

+1

Je reçois un 404 sur ce lien maintenant ... une idée s'il y a une version mise à jour quelque part? – Steve

+0

Hélas, pas du haut de ma tête. J'espère que la page reviendra. –

Questions connexes