24 Stimmen

Wie schreibt man einen Linter?

In meiner täglichen Arbeit schreiben ich und andere in meinem Team eine Menge Hardwaremodelle in Verilog-AMS, einer Sprache, die hauptsächlich von kommerziellen Anbietern und einigen Open-Source-Simulatorprojekten unterstützt wird. Eine Sache, die die gegenseitige Unterstützung des Codes hilfreicher machen würde, wäre ein LINTER, der unseren Code auf gemeinsame Probleme überprüft und dabei hilft, einen gemeinsamen Code-Formatierungsstil durchzusetzen. Ich möchte natürlich in der Lage sein, meine eigenen Regeln hinzuzufügen und sie, nachdem ich ihren Nutzen für mich selbst bewiesen habe, an den Rest des Teams weiterzugeben. Es macht mir nichts aus, die anfallende Arbeit zu erledigen, aber ich möchte natürlich auch die Arbeit anderer bestehender Projekte nutzen.

Hat die erlaubte Sprachsyntax in einem Yacc- oder Bison-Format mir einen Vorteil verschafft? Oder sollte ich einfach jede Sprachanweisung in eine Perl-Zeichenkette saugen und Mustervergleiche verwenden, um die Dinge zu finden, die ich nicht mag?

(Die meisten Syntax- und Kompilierungsfehler werden von den kommerziellen Tools leicht erkannt, aber wir haben einige eigene Erweiterungen).

0voto

Hank Gay Punkte 67607

yacc / bison verschafft Ihnen definitiv einen Vorsprung, da für ein gutes Linting das Parsen des Programms erforderlich wäre. Regex (zumindest echte Regex) können triviale Fälle abdecken, aber es ist leicht, Code zu schreiben, der nicht mit den Regexen übereinstimmt, aber trotzdem einen schlechten Stil hat.

0voto

jbdavid Punkte 582

ANTLR scheint ein alternativer Weg zu den häufigeren (OK I YACC/BISON-Ansatz, der, wie sich herausstellt, auch LEX/FLEX als Front-End verwendet.

ein Quick lesen der FLEX man Seite Art von machen mich denken, es könnte der Rahmen für diese Regex Art von Idee sein.

Ok Ich werde das noch ein wenig schmoren lassen und dann sehen, wie schnell ich einen Prototyp des Parsers in der einen oder anderen Variante erstellen kann.

und ein bisschen länger

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X