2010-11-26 6 views
0

J'ai la grammaire suivante et je ne sais pas comment y remédier. Je vérifie que si elle est ambiguos les conditions Wirth mais peut-être cela n'a aucune importance parce que le bison utilise un analyseur LR:Aide avec cette grammaire, XMl dans Bison

première version, 7 changement/réduire

S->DE 
D->aKc 
E-><J K E2 
E2-> /> | > H I 
I-> </J> 
K-> | KL 
L-> j ='N' 
H-> | HT 
T-> N E3 
E3-> | E N 
N -> | N N2 
N2-> text | j 

où j est un mot valide, et le texte est juste du texte sans caractères spéciaux, a et c sont la chaîne qui entoure une déclaration xml. l'un des conflits qui apparaissent est un décalage/réduire qui fait que la règle E3 ->/vide/devenir inutile.

Je fais quelques améliorations avec la transition epsilon

Deuxième version 2shift/réduire

S-> D E 
D-> a D2 
D2->|K c 
E-> <J E1 
E1-> E2 | K E2 
E2-> /> | > HI 
I-> </J> 
K-> L | K L 
L-> J= 'N' 
N-> N N2 | N2 
N2-> X | J 
H-> HT | T 
T-> N|E 

Réduc changement 2 sont les problèmes qui lisent après un X ou J, et vient autre X ou J , il ne sait pas s'il réduit T ou décale et se prépare à utiliser N-> N N2 | N2

Troisième version 2shift/réduire, mais bien reconnaître mes exemples de fichiers xml

S-> D E 
D-> a D2 
D2-> K c | c  // a is "<?xml version=\"1.0\"" and c is "?>" 
E-> <J E1 
E1-> E2 | K E2 
E2-> /> | > E3 // this is the other correction, for the case of an empty element 
E3-> HI | I 
I-> </J> 
K-> L | K L 
L-> J= 'N' 
N-> N N2 | N2 
N2-> X | J // X and J are word(any strange word) and ValidWord(used in element and atributes names) 
H-> HT | T 
T-> N|E 
+0

Est-ce que ce sont les devoirs? – LarsH

Répondre

1

C'est à peu près aussi cryptique qu'il peut obtenir et je pense que vous obtenez beaucoup de conflits.

La récursivité gauche dans la clause N -> | N N2 suggère une boucle infinie où le 2ème N est continuellement réduit à vide en utilisant la 1ère règle.

Si E3-> vide et N-> vide alors T-> vide et si H-> vide dans son premier paragraphe, il s'ensuit que H-> vide car HT-> vide. Etc.

Je commencerais par quelque chose de plus facile pour mieux comprendre l'écriture parser.

+0

merci, oui j'ai de sérieux problèmes avec cela, j'ai lu la documentation de bison et ils recommandent que si vous devez mettre une récursivité, il doit être dans la gauche. J'ai fait quelques exemples de jouets mais ce dont j'ai besoin est ceci, un analyseur pour xml ... je reçois au total 7 shift/réduit les conflits, ma principale limitation est comment faire face aux transitions epsilon et ne pas casser la validité de l'analyseur. ..je vais continuer la lecture, si une amélioration je vais vous informer – mjsr

+0

je fais quelques améliorations, regardez la deuxième version – mjsr

+0

Au lieu de nous laisser deviner dans le noir, il serait utile si vous avez posté le SR/RR conflits que vous obtenez – smirkingman

Questions connexes