Hi,
ich arbeite aus Spaß im Moment an Code-Erkennung (so nenne ich es mal). Speziell JavaScript Code. Ich möchte also verschiedene Bestandteile des Codes erkennen und unterscheiden, auch für Code-Highlighting.
Wie man einfache Strings erkennt, ist ja nicht so das Problem, auch Keywords nicht.
Komplexer wird es allerdings, wenn ich sowas hab:
var test = "a' gi " + '"b"';
Würde ich zB erst alle "-Strings erkennen und einfärben, wäre der zweite String schon falsch erkannt (also das "b"). Würde ich erst alle '-Strings suchen, wäre ' a gi " + ' ein String, was aber nicht stimmt.
Sehr ähnlich ist es bei regulären Ausdrücken:
var reg = /test" bla"/;
Und überhaupt, Codebestandteile innerhalb anderer Codebestandteile. Auch Strings innerhalb von Comments usw.
Das Problem ist halt: würde ich erst alle Comments suchen, dann alle Strings, dann wäre das hier fälschlicherweise auch ein Comment:
var com = "/*Test*/";
Und andersrum halt genauso.
Das hier zB würde auch zu einem Parserfehler führen:
/*
var test = /comment\*//;
*/
Also scheinen Strings irgendwie schon mal höhere "Priorität" gegenüber Comments zu haben, als reguläre Ausdrücke, da das hier geht:
/*
var test = "bla*/";
*/
Da bin ich jetzt überfragt, und wende mich an euch, da es für sowas ja sicher eine Lösung gibt.
Aber ich möchte zB auch Code Blöcke erkennen, also zB ganze Funktionen. Da ist das Problem, dass man ja nicht einfach nach /{.*?}/ suchen kann, da ja auch } innerhalb der Funktion gefunden wird.
Wie wird sowas gemacht?
Danke für Hilfe.
Gruß
Christian