Schlechter Rat bei der Arbeit mit ANTLR

Ihre Aufmerksamkeit wird auf eine Reihe schädlicher Tipps gelenkt, mit denen Sie den produktivsten Parser erstellen können. Vergessen Sie nicht, alles gemäß den Anweisungen zu tun, sonst geht etwas schief!

1. ATN - kein Fehler, sondern eine Funktion


Terrence Par hat eine großartige Funktion zur Optimierung der Verzweigungsvorhersage in Ihrer Grammatik entwickelt. Ausschließlich aus Sorge um die Leistung Ihres Parsers ist das Feld statisch und sammelt Informationen für immer! Natürlich werden Sie bei kleinen Dateien keinen großen Unterschied bemerken. Die Hauptsache ist, in Ihren Tests keine Dateien mit 2-3 Megabyte zu analysieren, auch wenn nicht genügend Speicher für jemand anderen vorhanden ist!

2. Lookahead für diejenigen, die es nicht gewohnt sind, auf Explosionen zurückzublicken!


Wenn Ihre Grammatik bei jeder Regel alle Token aus dem Stream überprüft, können Sie die Genauigkeit der Verarbeitung garantieren! Wenn nicht genügend Stapel vorhanden sind, reicht es aus, die Größe um das Zehnfache zu erhöhen. Hauptsache, Sie müssen mehr Regeln festlegen!

3. SLL für Weicheier


Warum optimieren, wenn ANTLR4 dies für Sie tun kann? Die Grammatik im ALL-Modus spart Ihnen wertvolle Zeit beim Lesen solcher Artikel. Denken Sie daran, jeder Alternative die gleichen Token hinzuzufügen, insbesondere wenn sie schön aussieht.

4. AST - alle Informationen, die Sie haben


Vergessen Sie nicht, Terrence anzuhören und Ihrem Parser Besucher- und Hörerunterstützung hinzuzufügen. Das Einbetten von Code in eine Grammatik ist nicht nur eine unnötige Schwierigkeit, sondern auch ein potenzielles Problem beim Refactoring! Wenn Sie jeden Knoten im Baum umgehen, können Sie nicht nur Ihr Glück versuchen, sondern auch die Nerven des Kunden überprüfen!

5. Mehr Regeln, Gott der Regeln!


Aber wussten Sie, dass Sie mit Hilfe von ANTLR4 einen Turm von Babel bauen können? In den Codeabschnitten mit einer großen Verschachtelung kann nicht gefunden werden? Eine Funktion innerhalb einer Funktion mit einer großen Anzahl von Ausdrücken? Zeigen Sie dem Kunden nur nicht die Arbeit an minimierten JS-Dateien, niemand versteht sie, selbst Browser.

6. Der Lexer wird nur zum Erstellen von Token benötigt.


Versuchen Sie unter keinen Umständen, etwas mit den Token im Lexer zu tun. Wenn Sie den {} -Block in den Token packen, können Sie nicht die Maschinen des Kunden anzeigen, die mehr Speicher benötigen!

Erinnerung muss fließen! Möge memleak mit dir sein!

Source: https://habr.com/ru/post/undefined/


All Articles