Ich schreibe einen einfachen JavaScript-Tokenizer, der grundlegende Typen erkennt: Word, Number, String, RegExp, Operator, Comment und Newline. Alles läuft gut, aber ich kann nicht verstehen, wie zu erkennen ist, ob das aktuelle Zeichen RegExp-Trennzeichen oder Division-Operator ist. Ich verwende keine regulären Ausdrücke, weil sie zu langsam sind. Kennt jemand den Mechanismus, um es zu entdecken? Danke.
Sie können erkennen, um was für ein Token es sich im Stream handelt. Gehen Sie durch jeden Token, den Ihr Lexer ausstrahlt, und fragen Sie, ob ihm ein Divisionszeichen oder eine Regexp sinnvoll folgen kann; Sie werden feststellen, dass die beiden resultierenden Mengen von Token disjunkt sind. Beispielsweise können (
, [
, {
, ;
und alle binären Operatoren nur von einem regulären Ausdruck gefolgt werden. Entsprechend kann )
, ]
, }
, Bezeichner und Zeichenfolgen / Zahlenliterale nur durch ein Divisionszeichen gefolgt werden.
Weitere Informationen finden Sie in Abschnitt 7 der ECMAScript-Spezifikation .
Sie müssen den Kontext überprüfen, wenn Sie auf den Schrägstrich stoßen. Wenn der Schrägstrich hinter einem Ausdruck steht, muss es Division sein, oder es ist ein Regexp-Start.
Um den Kontext zu erkennen, müssen Sie vielleicht einen Syntax-Parser erstellen.
zum Beispiel
%Vor%Tags und Links javascript regex tokenize token