5 Stimmen

Entwurfsmuster für die Syntaxhervorhebung

Ich bin auf der Suche nach einigen guten Übersichten über bewährte Verfahren und gemeinsame Muster für die Aktivierung der Syntaxhervorhebung in einem Textfeld. Es scheint eine sehr häufige Übung zu sein, dass fast alle Sprachen ein UI-Steuerelement haben, das die Syntaxhervorhebung in verschiedenen Sprachen aktiviert. Ich bin einfach neugierig, ob es ein gemeinsames Muster für die Implementierung gibt.

Verwendet jeder reguläre Ausdrücke? Gibt es ein Repository für reguläre Ausdrücke, die häufig in Syntaxhervorhebungsszenarien verwendet werden?

Gibt es alternative/bessere Ansätze zur Syntaxhervorhebung?

Update

Links zu relevanten Ressourcen über die Durchführung von Syntax-Highlighting in einer bestimmten Sprache oder Konzepte im Zusammenhang mit Syntax-Highlighting wären großartig. Lexing (lexikalische Analyse) wurde in einer Antwort erwähnt, aber ohne einen Link, um mehr zu erfahren. Alles, was dazu beiträgt, dieses häufig gelöste Problem besser zu verstehen, wäre großartig.

Lexikalische Analyse auf Wikipedia

2voto

levik Punkte 108445

Reguläre Ausdrücke sind definitiv die erste Anlaufstelle für die meisten. Allerdings können sie nicht wirklich mit vielen Randfällen fertig werden, die in den meisten Sprachen vorkommen - Text, der wie Schlüsselwörter aussieht, kann in gefundenen String-Literalen enthalten sein, String-Literalen wiederum können maskierte Trennzeichen sowie Sonderzeichen enthalten. Das Gleiche gilt für Kommentare usw.

Um eine gute Syntaxhervorhebung zu erreichen, müssen Sie den Quelltext lexieren, d. h. unter Anwendung sprachspezifischer Heuristiken parsen, um eine Liste von Bereichen zu erstellen, wobei jeder Bereich des Quelltextes mit der Art und Weise, wie er gestaltet werden soll, kommentiert wird.

Bei der Bearbeitung können Sie wiederum Sprachregeln anwenden, um zu sehen, inwieweit diese Änderung die Darstellung eines Bereichs verändern kann. Wenn Sie z. B. einen Buchstaben innerhalb eines Zeichenkettenliterales eingeben, wird der Bereich des Zeichenkettenliterales einfach länger, aber wenn Sie ein schließendes Anführungszeichen eingeben, wird der Bereich abgeschnitten und der übrig gebliebene Teil in Code umgewandelt, der allen anderen Lexierungsregeln unterliegt.

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