ich habe einen Tokenizer geschrieben, der einen einfachen Purebasic-Quellcode ohne Includes in seine Einzelteile zerlegt. Das heißt er erkennt nur sehr einfache Fehler, wie falsche Zahlenkonstanten und vor allem falsche Macro-Deklarationen.
Ich habe ihn zum Testen auf Linux x64 und Windows x64 kompiliert und es würde mich freuen, wenn ihr mal ein paar eurer Quellcodes drauf los lässt.
Ein Fehler ist mir eben aufgefallen, den ich aber noch nicht ausgemerzt habe. String-Variablen mit dem $ am Ende werden nicht erkannt. Da sucht mein Tokenizer vergeblich nach einer Hexadezimalzahl.
Der größte getestete Code meinerseits bestand aus 11877 Zeilen und lief problemlos durch. Komischerweise brauchte ein Code mit nur 742 Zeilen auf Windows fast 6 Sekunden und auf Linux gerade mal 120 ms, beides natürlich ohne Debugger. Ich weiß noch nicht, wo da der Flaschenhals ist. Das Windows-Executable lief sogar unter WINE mehr als doppelt so schnell als unter einem richtigen Windows.
Toll wäre es, wenn ihr mal ein paar Codes von euch durchjagt und schaut, ob alle problemlos durchlaufen, wenn Purebasic selbst sie auch kompilieren kann. Zusätzlich würde ich mich natürlich freuen, wenn ihr extra mal Fehler einbaut und schaut, was er daraus macht.
Hier die Binaries: Tokenizer
Hier noch ein paar mögliche Fehlermeldungen.
Binary value without digits
Character not terminated.
Constant name can not begin with a number:
Digits not allowed in exponent:
EndMacro missing.
Hexadecimal value without digits
Illegal character after constant name: ?
Illegal character as begin of constant name: ?
Illegal character in constant name: ?
Invalid character after Macro definition: ?. Expecting :, CR or LF.
Invalid character after Macro name: ?. Expecting (, LF, CR or :.
Invalid character after number: ?
Invalid character in Macro name: ?. Expecting a-z, A-Z, 0-9 or _.
Invalid character in Macro parameter: ?. Expecting a-z, A-Z, _, = or comma.
Invalid digit in binary value:
Invalid digit in hexadecimal value:
Invalid escape character in parameters default value: ?
Invalid escape sequence in literal string: \?
Literal string not terminated.
Low memory
Macro definition ends unexpectedly.
Macro has no body.
Macro name begins with illegal character: ?. Expecting a-z, A-Z or _.
Macro name is empty.
Macro parameter already exists.
Memory low.
Missing ) after parameter definition.
Missing =, ) or comma.
No constant name specified.
No CR or LF allowed inside of a string in parameter default value.
No exponent specified: ?
No parameter specified.
Only one period allowed in number.
Parameter name begins with invalid character: ?. Expecting a-z, A-Z or _.
String not terminated.
Unexpected end of string in parameter default value.