Ich habe dabei geholfen, eine 20 Jahre alte proprietäre Sprache in meiner Firma zu erweitern. Es ist eine große, Turing-vollständige Sprache. Es zu einer anderen Grammatik zu übersetzen (wie Antlr) ist keine Option (ich kann das nicht entscheiden).Gibt es Yacc-Grammatik-Debugger?
In den meisten Fällen ist die Erweiterung der Grammatik reibungslos verlaufen. Aber jeder einmal in einer Weile werde ich eine Verminderungs reduzieren oder bei gedrückter Umschalttaste reduzieren, dass
- schwierig ist
- zu beseitigen manchmal macht einfach keinen Sinn machen (zu meinem schwachen Gehirn)
Nach einer Menge von schmerzhaften starren auf y.output Dateien und experimentelle Grammatik Refactorings, habe ich in der Regel bekommen, wo ich hin wollte. Manchmal musste ich unbefriedigende Kompromisse machen.
Also, gibt es irgendwelche Tools da draußen, die in einer Yacc-Grammatik saugen können, die das Browsen verbessern, experimentieren und das Debuggen von Änderungen erlauben?
Wenn ich eine Produktion hinzufüge, würde ich gerne mehr sehen als "atomare Produktion, die überall verwendet wird" (think identifier) "Konflikte mit Regel foo" (ja, es gibt mehr Infos, s/r, r/r, als das, aber ich denke, du bekommst meine Drift). Es wäre schön, einen Hinweis auf das Wechselspiel zu haben, wenn ich meine Denkkappe nicht auflege und mir einen Symbolstapel und eine Zustandsmaschine vorstellen würde.
Update: Ich denke, ich sollte klären. Wir benutzen Berkeley Yacc. Ich habe mit einer neuen Version von Bison getestet. Zur Ausgabe habe ich die Grammatik mit --report = itemset kompiliert.
Mein Ziel mit diesem Beitrag ist externe Tools zu suchen, die augment die Grammatik-Debugging, die Schiff mit yacc. Es ist heute schmerzhaft mit der Standardeinstellung. Helfen Sie mir, bessere interaktive Tools zu finden, beispielsweise solche, die Sie mit Antlr verwenden können.
Ich bin mir nicht sicher, was du meinst. Mit unseren beiden yaccs bedeutet -d "eine Header-Datei für die Token-Makros ausgeben". Ich habe gerade weitere Informationen zur Verwendung des Schalters --report = itemset hinzugefügt. Ist das etwas, was du meinst? Es erzeugt eine Datei, y.output voll von allen Zustandsübergangsinformationen. Ich benutze es, hoffte aber auf ein leistungsfähigeres, interaktives Tool. –
Jerry hat Recht, S/R-Konflikte sind nicht unbedingt Fehler. Fast jede echte Grammatik hat eine Menge von ihnen. – DigitalRoss