Frage

Die Softwarebasis ich für entwickle verwendet eine signficant Menge von yacc, die ich brauche nicht zu behandeln. Einige Male denke ich, es wäre hilfreich, einige Probleme im Verständnis finde ich aber die meiste Zeit kann ich mit meiner völligen Unkenntnis der yacc wegzukommen.

Meine Frage gibt es genug neue Projekte gibt, die noch yacc verwenden, um die Zeit zu rechtfertigen ich es lernen müssen, werden?

Edit: die Antwort ist meist zugunsten Yacc des Lernens, gibt es eine ähnliche Sprache, die Sie über yacc empfehlen würden

?
War es hilfreich?

Lösung

Ja, sind diese Werkzeuge im Wert von Lernen, wenn Sie jemals Code müssen erstellen oder ändern, die eine Grammatik analysiert.

Seit vielen Jahren sind das De-facto-Tool für die Codegenerierung einer Grammatik war yacc zu analysieren, oder sein GNU Cousin, Bison.

In letzter Zeit habe ich gehört, dass es ein paar neue Kinder auf dem Block sind, aber das Prinzip ist das gleiche: Sie eine deklarative Grammatik in einem Format zu schreiben, die mehr oder weniger in Backus-Naur-Form ( BNF ) und yacc / Bison / was auch immer für Sie einen Code erzeugt, dass wäre sehr mühsam sein, zu schreiben von Hand.

Auch können die Prinzipien hinter Grammatiken sehr nützlich sein, selbst zu lernen, wenn Sie direkt auf einen solchen Code nicht arbeiten müssen. Ich habe nicht mit Parsern viel, seit er einen Kurs über Übersetzerbau in der Schule, aber das Verständnis Runtime Stacks, Look-Ahead-Parser, Ausdrucksauswertung und viele andere ähnliche Dinge hat mir geholfen immens zu schreiben und zu debuggen meinen Code effektiv gearbeitet.

Bearbeiten Ihre followup Frage über andere Werkzeuge gegeben, Yacc / Bison natürlich ist am besten für C / C ++ Projekte, da sie C-Code generieren. Es gibt ähnliche Werkzeuge für andere Sprachen. Nicht alle Grammatiken äquivalent sind, und einige Parser-Generatoren können nur grok Grammatiken von einer gewissen Komplexität. So müssen Sie ein Tool finden, die Ihre Grammatik analysieren kann. Siehe http://en.wikipedia.org/wiki/Comparison_of_parser_generators

Andere Tipps

Ich weiß nicht, über neue Projekte, die sie verwenden, aber ich bin in sieben verschiedene Instandhaltungsarbeiten beteiligt, die für die Verarbeitung von Konfigurationsdateien lex und yacc verwendet werden.

Keine XML für mich, nicht-sir-ee: -).

Lösungen lex / yacc verwenden, sind ein Schritt von den alten Konfigurationsdateien von key=val Linien, da sie besser hierarchische Strukturen wie erlauben:

server = "mercury" {
    ip = "172.3.5.13"
    gateway = "172.3.5.1"
}
server = "venus" {
    ip = "172.3.5.21"
    gateway = "172.3.5.1"
}

Und, ja, ich weiß, dass mit XML zu tun, aber diese sind in erster Linie von Legacy-Anwendungen in C geschrieben und, um ehrlich zu sein, würde ich wahrscheinlich auch lex / yacc für neue (nicht-Java) Jobs verwenden.

Das ist, weil ich Software auf Zeit und Budget zu liefern lieber als die größte neue Whizknall Technologie liefert - meine Kunden nicht für meine Ausbildung bezahlen, sie wollen Ergebnisse in erster Linie, und ich bin schon Experte bei lex / yacc und haben alle Template-Code für es schnell tun.

Eine Faustregel: Code dauert eine lange Zeit, so dass die in diesem Code verwendeten Technologien zuletzt eine lange Zeit, auch. Es wäre eine enorme Menge an Zeit, um die Code-Basis Sie erwähnen (es dauerte 15 Jahre, um ihn zu bauen ...) zu ersetzen, was wiederum bedeutet, dass es immer noch um Jahre in 5, 10 oder mehr sein wird. (Es gibt sogar eine Chance, dass jemand, der diese Antwort liest, wird auf sie am Ende arbeiten!)

Eine andere Regel gilt: Wenn ein Universal Technologie alltäglich ist genug, dass man es schon erlebt haben, ist es wahrscheinlich alltäglich genug, dass man sich damit vertraut machen sollte, weil man es eines Tages wieder sehen werden. Wer weiß: selbst mit ihm vertraut gemacht, vielleicht kann du ein nützliches Werkzeug zur Toolbox ...

Yacc ist eine dieser Technologien: Sie sind wahrscheinlich in sie wieder laufen gehen, ist es nicht so schwierig, und die Prinzipien Sie werden auf die ganze Familie von Parser Konstrukteurs lernen anwenden

.

PEGs die neuen Hotness sind, aber es gibt immer noch eine Menge von Projekten, die yacc verwenden oder Werkzeuge moderner als yacc. Ich würde an einem neuen Projekt die Stirn runzeln, die yacc wählte zu verwenden, sondern auch für bestehende Projekte zu einem moderneren Werkzeug portieren kann nicht sinnvoll. Dies macht mit rauer Vertrautheit mit yacc eine nützliche Fähigkeit.

Wenn Sie völlig vertraut mit dem Thema Parser-Generatoren sind würde ich Sie ermutigen, über ein zu lernen, irgendeine. Viele der Konzepte sind tragbar zwischen ihnen. Außerdem ist es ein nützliches Werkzeug, um in dem Band zu haben: Sobald Sie eine kennen Sie werden verstehen, wie sie oft überlegen sein können im Vergleich zu regex schwere Hand geschrieben Parser. Wenn Sie bereits komfortabel mit dem Thema Parsern sind, dann würde ich nicht darum kümmern. Sie werden yacc erfahren, ob und wann Sie brauchen, um etwas zu erledigen.

ich an Projekten arbeiten, die Yacc verwenden. Nicht neue Code -. Aber wurden sie neu, sie würden immer noch benutzen Yacc oder einen nahen Verwandten (Bison, byacc, ...)

Ja, ich sehe es als wert Lernen, wenn Sie in C arbeiten.

Sehen Sie sich auch das Lernen ANTLR oder andere modernere Parser-Generatoren. Aber Wissen von Yacc werden Sie zustatten -. Es wird Sie andere ähnliche Werkzeuge helfen, zu lernen, da viele der grundlegenden Theorie ähnelt

Ich weiß nicht, über yacc / Bison speziell, aber ich habe verwendet antlr, Tasse, jlex und javacc. Ich dachte, sie nur von accademic Bedeutung sein würde, aber es stellt sich heraus, dass wir eine domänenspezifische Sprache benötigt wird, und das gab uns eine viel schönere Lösung als einige „einfacher“ (regex basiert)-Parser gibt. Wartung könnte ein Problem in vielen Umgebungen, obwohl -. Da in diesen Tagen die meisten Programmierer werden keine Erfahrung mit Parsing-Tools haben

Ich habe nicht die Chance, zu vergleichen mit anderen Analysesystemen habe, aber ich kann auf jeden Fall empfehlen ANTLR basierend auf meiner eigenen Erfahrung und auch mit seinem großen und aktiven Nutzerbasis.

Ein weiterer Pluspunkt für ANTLR ist ANTLRWorks: Die ANTLR GUI-Entwicklungsumgebung denen ist eine große Hilfe, während Entwicklung und Ihre Grammatiken debuggen. Ich habe noch eine weitere Analyse-System zu sehen, das von einer solchen IDE unterstützt wird.

Wir schreiben neuen yacc Code in meinem Unternehmen für Versandprodukte. Ja, diese Sachen immer noch benutzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top