STARGÅTE hat geschrieben:Kannst du mir den Link geben, wo der Fehler auftauch?
Ich habe die letzte Seite von diesem Thread verwendet, also:
viewtopic.php?f=13&t=21089&start=110
Ich habe gerade deinen langen RegEx bei der Internetseite
https://regexr.com/ prüfen lassen und bekam folgende Warnungen angezeigt:
(?<=) Warning: The "positive lookbehind" feature may not be supported in all browsers.
(?<!) Warning: The "negative lookbehind" feature may not be supported in all browsers.
Entferne ich die problematischen Teilausdrücke aus deinem RegEx funktioniert der Syntax-Highlighter wieder.
STARGÅTE hat geschrieben:Da ich den Code hier aus dem Forum aber nicht parsen will, sondern nur Einfärben, mache ich das wie PB und erlaube keine Leerzeichen (beim Einfärben!).
Ja, in dem Fall muss es nicht so genau sein. Das ist nur eine beispielhafte Feinheit, die mir auf die Schnelle eingefallen ist.
STARGÅTE hat geschrieben:Code: Alles auswählen
regEx$ = "[0-9]+(?:\.[0-9]+)?(?:e(?:[ \t]*[+\-][ \t]*)?[0-9]+)?" + ; Integers, decimal numbers and binary numbers
Wie soll der Ausdruck Binärzahlen erkenne, die mit % anfangen und nur 0 und 1 erlauben?
Der Lexer erstellt bei Binärzahlen zwei Tokens: [%] und [101010], weil nicht eindeutig bestimmt werden kann, ob das %-Zeichen im aktuellen Fall ein Operator oder ein Präfix der Binärzahl ist. Der Parser kann das später genau bestimmen, indem er die Token-Sequenz prüft. Das gleiche Problem gibt es auch mit dem
*-Zeichen: Pointer-Variable-Präfix oder Multiplikationszeichen.
Hier noch ein Wikipedia-Artikel:
https://en.wikipedia.org/wiki/The_lexer_hack
Der Syntax-Highlighter muss aber nicht so genau sein, wie du oben schon geschrieben hast. In der PureBasic-IDE wird das %-Zeichen auch nicht immer korrekt eingefärbt:
value = 10 % 10
value = 10% 10
value = 10 %10
value = 10%10
Außerdem ist in PureBasic auch keine Ziffer nach dem Dezimalpunkt erlaubt
Nicht immer:
ergibt
[COMPILER] Line 1: Syntax error.