2010-11-26 7 views
0

Ich habe die folgende Grammatik und ich weiß nicht, wie man es repariert. Ich überprüfe, dass, wenn es Ambiguos mit den Wirth Bedingungen ist aber vielleicht ist dies irrelevant, weil Bison einen LR-Parser verwenden:Hilfe mit dieser Grammatik, XMl in Bison

Erste Version, 7 Schiebe-/Reduzier

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 

wobei j ein gültiges Wort ist, und Text ist nur Text ohne besondere Zeichen, a und c sind die Zeichenfolgen, die eine XML-Deklaration umgeben. einer der Konflikte, die erscheinen, ist eine Verschiebung/reduzieren, die Ursache, dass die Regel E3 ->/leer/nutzlos werden.

Ich mache einige Verbesserungen mit dem Epsilon-Übergang

Zweite Version 2shift/reduzieren

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 

die 2-Shift Problem reduzieren, dass nach ein X oder J lesen und kommt andere X oder J , es weiß nicht, ob es T reduziert oder verschiebt und bereitet vor, N-> N N2 | zu verwenden N2

dritte Version 2shift/reduzieren, aber auch xml meine Beispieldateien

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

Ist das Hausaufgaben? – LarsH

Antwort

1

die etwa so kryptisch ist erkennen, wie es bekommen kann und ich denke, Sie viele Konflikte sind immer.

Die linke Rekursion in Klausel N -> | N N2 weist auf eine Endlosschleife hin, bei der das 2. N mit der 1. Regel kontinuierlich auf Leerwert reduziert wird.

Wenn E3-> leer und N-> leer dann T-> leer und wenn H-> leer in seiner ersten Klausel, folgt, dass H-> leer, weil HT-> leer. Und so weiter.

Ich würde mit etwas leichter beginnen, ein besseres Verständnis von Parser-Schreiben zu bekommen.

+0

danke, ja, ich habe ernsthafte Probleme damit, ich lese die Bison-Dokumentation und sie empfehlen, dass, wenn Sie eine Rekursion setzen müssen, es in der linken sein muss. Ich habe einige Spielzeuge Beispiele, aber was ich brauche, ist dies, ein Parser für Xml ... ich bekomme insgesamt 7 Shift/reduziert Konflikte, meine größte Einschränkung ist, wie mit Epsilon-Übergängen umgehen und nicht die Gültigkeit des Parsers brechen. ..Ich werde das Lesen fortsetzen, wenn ich eine Verbesserung mache, werde ich Sie informieren – mjsr

+0

Ich mache einige Verbesserungen, schauen Sie die zweite Version – mjsr

+0

Anstatt uns im Dunkeln raten zu lassen, würde es helfen, wenn Sie die SR/RR gepostet haben Konflikte, die Sie bekommen – smirkingman

Verwandte Themen