Ist Yacc noch in der Industrie verwendet?
Die software-Basis bin ich für die Entwicklung verwendet eine erhebliche Menge von yacc, die ich nicht brauchen, zu beschäftigen. Einige Male, die ich denke, es wäre hilfreich für das Verständnis einiger Probleme, die ich finden, aber die meisten der Zeit, die ich bekommen kann Weg mit meiner völligen Unkenntnis von yacc.
Meine Frage gibt es genug neue Projekte gibt, die noch mit yacc, um zu gewährleisten das die Zeit werde ich brauchen, um es zu lernen?
Edit: Da die Antwort meist zugunsten des Lernens Yacc, gibt es eine ähnliche Sprache, die Sie würde empfehlen, über yacc?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, diese tools lohnt, zu lernen, wenn Sie jemals brauchen, um erstellen oder ändern von code, der analysiert eine Grammatik.
Seit vielen Jahren der de-facto-Werkzeug für die code-Generierung zu analysieren, eine Grammatik wurde yacc oder GNU cousin, bison.
In letzter Zeit habe ich gehört, es gibt ein paar new kids on the block, aber das Prinzip ist das gleiche: Sie schreiben eine deklarative Grammatik in einem format, das mehr oder weniger in der Backus-Naur-Form (BNF) und yacc/bison/was auch immer erzeugt code für Sie, dass wäre extrem mühsam mit der hand Schreibe.
Auch, die Prinzipien, die hinter Grammatiken kann sehr nützlich sein, um zu lernen, auch wenn Sie nicht arbeiten müssen, um auf einen solchen code direkt. Ich habe nicht gearbeitet mit Parser viel seit der Einnahme einen Kurs auf Compiler Design in der Schule, sondern im verstehen des Laufzeit-stacks, lookahead-Parser, der Auswertung eines Ausdrucks, und viele andere Dinge, die mir geholfen hat immens zu schreiben und zu Debuggen mein code effektiv.
edit: Angesichts Ihrer Nachfolge-Frage nach anderen tools Yacc/Bison sind natürlich am besten für C/C++ - Projekte, ab, denn Sie erzeugen C-code. Gibt es ähnliche tools für andere Sprachen. Nicht alle Grammatiken sind äquivalent, und einige parser-Generatoren können nur grok Grammatiken einer bestimmten Komplexität. So müssen Sie eventuell ein tool finden können, analysieren Sie Ihre Grammatik. Sehen http://en.wikipedia.org/wiki/Comparison_of_parser_generators
Ich weiß nicht, über neue Projekte zu benutzen, aber ich bin in sieben verschiedene Wartungs-jobs, dass die Verwendung von lex und yacc für die Bearbeitung von Konfigurationsdateien.
Kein XML für mich, Nein, sir-ee :-).
Lösungen mit lex/yacc sind ein Schritt aus dem alten Konfigurationsdateien von
key=val
Linien, denn Sie erlauben eine bessere, hierarchische Strukturen wie:Und, ja, ich weiß, Sie können tun, dass mit XML, aber diese sind in Erster Linie legacy-Anwendungen in C geschrieben und, um ehrlich zu sein, würde ich wahrscheinlich nutzen, lex/yacc für neue (nicht-Java) sondern auch die Arbeitsplätze.
Das ist, weil ich lieber in der Bereitstellung von software auf Zeit-und budget-eher als die Bereitstellung der größte neue Whiz-bang-Technik - meine Kunden nicht zahlen für meine Ausbildung, Sie wollen die Ergebnisse in Erster Linie, und schon bin ich Experte bei lex/yacc und haben alle den template-code für es zu tun schnell.
Faustregel gilt: code, der eine lange Zeit dauert, damit die Technologien verwendet, die im code zuletzt eine lange Zeit auch. Es würde eine enorme Menge an Zeit, Sie zu ersetzen die codebase, die Sie erwähnen (es dauerte 15 Jahre, um es zu bauen...), was wiederum bedeutet, dass es noch in 5, 10 oder mehr Jahre. (Es gibt sogar eine chance, dass jemand, der liest diese Antwort wird am Ende der Arbeit an es!)
Andere Faustregel: wenn ein general-purpose-Technologie ist alltäglich genug, dass Sie Sie angetroffen haben bereits, ist es wahrscheinlich alltäglich genug, dass Sie sollten vertraut machen mit, weil Sie sehen, dass es eines Tages wieder. Wer weiß: Sie kennen es, vielleicht haben Sie Hinzugefügt ein nützliches tool für Ihren Werkzeugkasten...
Yacc ist eine dieser Technologien: Sie sind wahrscheinlich gehen, um es wieder, es ist nicht so schwierig, und die Grundsätze, die Sie lernen, anwenden, um die ganze Familie von parser-Konstruktoren.
Heringe sind die neue Schärfe, aber es gibt immer noch eine Tonne von Projekten, die yacc oder Werkzeuge moderner als yacc. Ich würde die Stirn Runzeln, an einem neuen Projekt, die sich entschieden, zu verwenden, yacc, aber für bestehende Projekte ist die Portierung zu einem modernen Werkzeug nicht unbedingt Sinn. Dies macht, dass grobe Vertrautheit mit yacc eine nützliche Fähigkeit.
Wenn Sie völlig unvertraut mit dem Thema parser-Generatoren möchte ich Sie dazu ermutigen, zu lernen, über einem, beliebigen. Viele der Konzepte sind portabel zwischen Ihnen. Es ist auch ein nützliches Instrument, um in den Gürtel: sobald Sie wissen, Sie werden verstehen, wie Sie sich oft überlegen im Vergleich zu regex schwer von hand geschriebene Parser. Wenn du bist bereits vertraut mit dem Thema der Parser, würde ich nicht darum kümmern. Erfahren Sie, yacc, wenn und wenn Sie brauchen, um etwas zu erledigen.
Arbeite ich an Projekten, die Yacc. Nicht neue code - aber waren Sie neu, Sie würde immer noch verwenden, Yacc oder einen nahen verwandten (Bison, Byacc, ...).
Ja, ich betrachte es als Wert lernen, wenn Sie die Arbeit in C.
Berücksichtigen Sie auch lernen, ANTLR, oder andere moderne parser-Generatoren. Aber die Kenntnis von Yacc wird Ihnen zugute - es wird Ihnen helfen, lernen andere ähnliche tools auch, da viele der grundlegenden Theorie ist ähnlich.
Ich weiß nicht, über yacc/bison speziell, aber ich habe verwendet antlr, Tasse, jlex und javacc. Ich dachte, Sie wäre nur der accademic Bedeutung, aber wie es sich herausstellt, benötigten wir eine domain-spezifische Sprache, und dies gab uns eine viel bessere Lösung als die, die etwas "einfacheren" (regex basiert) - Parser gibt. Die Wartung könnte ein Problem sein, in vielen Umgebungen, obwohl - da die meisten Programmierer in diesen Tagen nicht haben keine Erfahrung mit Analyse-tools.
Hatte ich noch nicht die Gelegenheit zu vergleichen mit anderen Analyse-Systemen, aber ich kann auf jeden Fall empfehlen ANTLR basierend auf meinen eigenen Erfahrungen und auch mit seiner großen und aktiven Kundenbasis.
Weiterer plus-Punkt für ANTLR ist ANTLRWorks: Die ANTLR-GUI-Entwicklungsumgebung das ist eine große Hilfe beim entwickeln und Debuggen von Grammatiken. Ich habe noch zu sehen, ein anderer parsing-system, das unterstützt wird durch eine solche IDE.
Wir schreiben neue yacc-code in meiner Firma für den Versand der Produkte. Ja, das Zeug ist immer noch verwendet.