Christian Kruse: Tutorial oder Tipps zu Syntax-Highlighting?

Beitrag lesen

Moin var,

das ist in der Tat ein interessantes Thema. Zum generellen Syntax higlighting hast du ja schon so einiges bekommen, im Grunde reicht dafür ein einfacher lexer aus. Also eine Funktion, dass den Quelltext in Wörter (Tokens) zerlegt und die Art des Tokens bestimmt. Damit nicht immer der komplette Text neu geparsed werden muss, verwenden die meisten Editoren jedoch sogenannte „Milestones.“ Dabei wird der parse state bis zu bestimmten Punkten im Text gespeichert, etwa an Newlines. Wenn dann etwas am Text geändert wird, geht man zurück zum letzten Milestone, nimmt den parse state und parsed dann darauf basierend den Rest des Textes. Die rendering engine kann genau so arbeiten (und das tut sie auch in den meisten Editoren).

Es gibt aber auch Editoren, die ein Verfahren implementiert haben, dass sich inkrementelles Parsing nennt. Dabei wird ein AST generiert, der sich on the fly partiell ändert und es wird nicht jedes mal wieder der komplette Text geparsed. Das besondere daran ist, dass diese Art ein semantisches Verständnis des Sourcecodes hat, so dass man damit deutlich mehr machen kann, siehe z.B. das umbenennen einer Variablen im aktuellen Scope ohne die Variablen ausserhalb des Scopes zu ändern. Einen kleinen Einblick mag dieses Video geben: https://www.youtube.com/watch?v=-7yMWD1wUu4 Das nutzt den AST, der von Emacs js2-mode erzeugt wird, um ein paar Eindrucksvolle Dinge zu tun.

Auf die schnelle habe ich allerdings nur dieses Paper zum Thema gefunden.

LG,
 CK