Frage

In meinem Job ich, und andere in meinem Team eine Menge Hardware-Modelle in Verilog-AMS schreiben, eine Sprache unterstützt in erster Linie von kommerziellen Anbietern und einigen Open-Source-Simulator-Projekte. Eine Sache, die jeden anderen Code Unterstützung hilfreicher machen würde wäre ein LINTER, die unseren Code für gemeinsame Probleme überprüfen würden und unterstützen mit einem gemeinsamen Code-Formatierung Stil durchzusetzen. Ich möchte natürlich in der Lage sein meine eigene Regeln hinzufügen und, nachdem ich ihr Nutzen für mich beweisen, fördern sie dem Rest des Teams .. Ich kümmere mich nicht um die Arbeit zu tun, was getan werden muss, aber natürlich will auch die Arbeit anderer bestehende Projekte nutzen.

Ist mit der erlaubten Sprachsyntax in einem yacc oder Bison-Format geben Sie mir ein Bein? oder sollte ich nur saugen jede Sprachanweisung in ein Perl-String, und verwenden Sie Pattern-Matching, die Dinge zu finden Ich mag es nicht?

(die meisten Syntax und Kompilierungsfehlern von den kommerziellen Tools leicht gefangen werden .. aber wir haben einige unserer eigenen extentions.)

War es hilfreich?

Lösung

lex / flex und yacc / Bison bietet einfach zu bedienende, gut verstandene lexer- und Parser-Generatoren, und ich würde wirklich empfehlen, so etwas zu tun, im Gegensatz zu tun, es prozedural in z.B. Perl. Reguläre Ausdrücke sind leistungsfähige Sachen für Saiten mit relatively- zerreißen, aber nicht total-feste Struktur. Mit einer echten Programmiersprache, wird die Größe der Zustandsmaschine mit etwas weniger als ein Echt Lexer / Parser (tm) nicht zu bewältigen sein. Stellen Sie sich vor dem Umgang mit allen möglichen Verschachtelungen von Schlüsselwort, Identifikatoren, Operatoren, Fremd Klammern, Fremd Semikolons und Kommentaren, die allein in so etwas wie Verilog AMS, mit regulären Ausdrücken und prozeduralen Code erlaubt sind.

Es ist nicht zu leugnen, dass es eine erhebliche Lernkurve gibt, aber eine Grammatik zu schreiben, die Sie für flex verwenden können und Bison, und etwas Nützliches auf dem Syntaxbaum zu tun, die aus Bison kommt, wird eine viel bessere Nutzung Ihrer Zeit sein als eine Tonne Spezialfall-String-Verarbeitung Code zu schreiben, die mit der Verwendung eines Syntax-Baumes in erster Linie natürlich mehr behandelt wird. Auch, was Sie es auf diese Weise lernen Schreiben wird wirklich Ihre Skillset in einer Weise erweitern, dass eine Reihe von Hacky Perl Code schreiben will einfach nicht, also, wenn Sie die Mittel haben, empfehle ich es; -)

Auch wenn Sie faul sind, überprüfen Sie die Eclipse-Plugins aus, die Syntax-Hervorhebung tun und grundlegende Umgestaltung für Verilog und VHDL. Sie sind in einem unglaublich primitiven Zustand, zuletzt geprüft ich, aber sie können einen Teil des Codes haben Sie suchen, oder zumindest eine Basislinie Stück Code zu betrachten, um besser zu informieren Sie Ihren Ansatz, um Ihre eigene in rollen.

Andere Tipps

Ich habe ein paar Verilog-Parser geschrieben, und ich würde vorschlagen PCCTS / ANTLR, wenn Ihre bevorzugte Programmiersprache C / C ++ / Java ist. Es gibt einen PCCTS / ANTLR Verilog Grammatik , die Sie mit beginnen können. Mein Lieblings Parser-Generator ist Zebu , die auf Common Lisp basiert.

Natürlich ist die große Aufgabe ist es, alle Fusseln Regeln zu spezifizieren. Es macht Sinn, eine Art von Sprache zu machen, wie auch die Fusseln Regeln angeben.

Sie die Menge der Arbeit nicht unterschätzen, die in einen Linter geht. Parsing ist der einfache Teil, weil Sie haben Werkzeuge (Bison, Flex, ANTLR / PCCTS) viel davon zu automatisieren.

Aber sobald Sie haben einen Parse, was dann? Sie müssen eine semantische Struktur für das Design bauen. Je nachdem, wie kompliziert Ihre Eingaben sind, müssen Sie das Verilog-AMS-Design erarbeiten (das heißt Auflösungsparameter, Abrollen erzeugt, etc. Wenn Sie diese Funktionen verwenden). Und nur dann können Sie versuchen, Regeln zu implementieren.

ich ernsthaft andere mögliche Lösungen in Betracht ziehen würde, bevor sie eine Linter schreiben, es sei denn, die Zahl der Nutzer und mögliche Zeitersparnis, wodurch die Entwicklungszeit rechtfertigen.

Bei dem Versuch, meine Antwort zu finden, fand ich diese auf

yacc / bison definitiv gibt Ihnen ein Bein, da gute Fusseln das Programm Parsen erfordern würde. Regex (true regex, zumindest) könnte trivial Fälle abdecken, aber es ist leicht, Code zu schreiben, die regulären Ausdrücke passen nicht zusammen, sind aber immer noch schlechten Stil.

ANTLR sieht ein alternativer Pfad zu den häufigeren (OK I hörte sie vor) YACC / BISON Ansatz sein, die sie häufig verwenden, auch stellt sich heraus, LEX / FLEX als Front-End.

ein Schnell Lesen des FLEX Manpage machen mich Art zu denken, es den Rahmen für die regex Art der Idee sein könnte ..

Ok .. Ich lasse diesen Eintopf ein wenig länger, dann sehen, wie schnell kann ich einen Prototyp-Parser in der einen oder anderen bauen.

und etwas länger

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