<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
	<channel>
		<title>BlitzBasic Portal Worklogs - Tokenizer &amp; Co.</title>
		<link>https://www.blitzforum.de/worklogs/302/</link>
		<description>Worklog von mpmxyz</description>
		<language>de</language>
		<managingEditor>mail@blitzforum.de</managingEditor>
		<webMaster>mail@blitzforum.de</webMaster>
		<pubDate>Fri, 27 Aug 2010 16:16:22 +0200</pubDate>
		<lastBuildDate>Fri, 27 Aug 2010 16:16:22 +0200</lastBuildDate>

		<item>
			<title>Halbzeit!</title>
			<link>https://www.blitzforum.de/worklogs/302/#2857</link>
			<guid>https://www.blitzforum.de/worklogs/302/#2857</guid>
			<author>mpmxyz</author>
			<description>Ich habe eben die - hoffentlich - letzte Racer-Klasse fertiggestellt. (Ich hatte gar nicht an Labels gedacht.  &lt;img src=&quot;/forum/images/smiles/icon_rolleyes.gif&quot; alt=&quot;Rolling Eyes&quot; /&gt;)&lt;br /&gt;Das Schreiben dieser Klassen war im Gegensatz zum ersten Versuch ziemlich angenehm, da ich schrittweise Arbeiten konnte und die Racer-Klassen voneinander unabh&amp;auml;ngig sind.&lt;br /&gt;Leider bl&amp;auml;ht das erweiterbare Verfahren den Code etwas auf:&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox0&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('0')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox0&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('0')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox0&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('0');&quot;&gt;800 Zeilen&lt;br /&gt;22,8 KiB&lt;br /&gt;17 Klassen mit insgesamt 49 Methoden&lt;/div&gt;&lt;br /&gt;Der OOP-Overhead und die parallele Verarbeitung verlangsamen au&amp;szlig;erdem das Laden des Codes um den Faktor 4 auf etwas mehr als 500 ms bei 29 KiB Code. (5fache Ladezeit)&lt;br /&gt;Das liegt aber meiner Meinung nach noch in einem ertr&amp;auml;glichen Zeitrahmen, da immerhin neue M&amp;ouml;glichkeiten hinzugekommen sind. (Dazu geh&amp;ouml;rt auch die M&amp;ouml;glichkeit, Fehler zu entdecken.)&lt;br /&gt;Hier ist die aktuelle Parser-Klasse f&amp;uuml;r BlitzMax-Code.&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Type TBMXParser Extends TCodeParser&lt;br /&gt;	Const TYP_SPACE:String=&amp;quot;space&amp;quot;&lt;br /&gt;	Const TYP_NEWLINE:String=&amp;quot;newline&amp;quot;&lt;br /&gt;	Const TYP_SYMBOL:String=&amp;quot;symbol&amp;quot;&lt;br /&gt;	Const TYP_LABEL:String=&amp;quot;label&amp;quot;&lt;br /&gt;	Const TYP_STRING:String=&amp;quot;string&amp;quot;&lt;br /&gt;	Const TYP_IDENTIFIER:String=&amp;quot;identifier&amp;quot;&lt;br /&gt;	Const TYP_INT:String=&amp;quot;int&amp;quot;&lt;br /&gt;	Const TYP_HEX:String=&amp;quot;hex&amp;quot;&lt;br /&gt;	Const TYP_BIN:String=&amp;quot;bin&amp;quot;&lt;br /&gt;	Const TYP_FLOAT:String=&amp;quot;float&amp;quot;&lt;br /&gt;	Const TYP_COMMENT:String=&amp;quot;comment&amp;quot;&lt;br /&gt;	Const TYP_CONDITION:String=&amp;quot;condition&amp;quot;&lt;br /&gt;'	Const TYP_:String=&amp;quot;&amp;quot; 'zuk&amp;uuml;nftige Erweiterungen&lt;br /&gt;	&lt;br /&gt;	Method New()&lt;br /&gt;		AddRacer(New TSpaceRacer) 'Leerzeichen&lt;br /&gt;		AddRacer(New TLineRacer) 'Zeilenumbr&amp;uuml;che&lt;br /&gt;		AddRacer(New TSymbolRacer) '+ - etc.&lt;br /&gt;		AddRacer(New TDoubleSymbolRacer) '&amp;lt;&amp;gt; :+ .. etc.&lt;br /&gt;		AddRacer(New TSymbolIdentifierRacer) ':Shl und &amp;Auml;hnliches&lt;br /&gt;		AddRacer(New TLabelRacer) 'Labels  (NEU!)&lt;br /&gt;		AddRacer(New TStringRacer) 'Strings&lt;br /&gt;		AddRacer(New TIdentifierRacer) 'Identifier, wie &amp;quot;abc123&amp;quot;&lt;br /&gt;		AddRacer(New TDividedIdentifierRacer) 'getrennte Schreibweisen f&amp;uuml;r z.B. &amp;quot;end if&amp;quot;&lt;br /&gt;		AddRacer(New TIntegerRacer) 'ganze Zahlen&lt;br /&gt;		AddRacer(New THexRacer) 'hexadezimale Angaben&lt;br /&gt;		AddRacer(New TBinRacer) 'bin&amp;auml;re Angaben&lt;br /&gt;		AddRacer(New TFloatRacer) 'Gleitkommaangaben&lt;br /&gt;		AddRacer(New TCommentRacer) 'einzeilige Kommentare&lt;br /&gt;		AddRacer(New TRemRacer) 'mehrzeilige Kommentare&lt;br /&gt;		AddRacer(New TConditionRacer) 'Bedingungen, wie &amp;quot;?Debug&amp;quot; (NEU!)&lt;br /&gt;	EndMethod&lt;br /&gt;EndType[/syntax]&lt;br /&gt;Wie man sieht, sieht man eigentlich nur eine Auflistung der M&amp;ouml;glichkeiten. &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt;&lt;br /&gt;Ich habe wieder versucht, mich komplett an den von BlitzMax vorgegebenen Standard zu halten.&lt;br /&gt;Deshalb gibt es hier KEINEN Fehler:&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]SuperStrict&lt;br /&gt;Rem&lt;br /&gt;Print &amp;quot;WTF?&amp;quot;[/syntax]&lt;br /&gt;Als n&amp;auml;chstes muss ich mir &amp;uuml;berlegen, wie ich die Struktur wieder zur&amp;uuml;ckbringe.&lt;br /&gt;Bis bald!&lt;br /&gt;mpmxyz</description>
			<pubDate>Fri, 27 Aug 2010 16:16:22 +0200</pubDate>
		</item>

		<item>
			<title>ein Nachtrag</title>
			<link>https://www.blitzforum.de/worklogs/302/#2840</link>
			<guid>https://www.blitzforum.de/worklogs/302/#2840</guid>
			<author>mpmxyz</author>
			<description>Inzwischen k&amp;ouml;nnen BlitzMax-Strings, Leerzeichen und Identifier eingelesen werden.&lt;br /&gt;Zu dem &amp;quot;Wettrenn-Algorithmus&amp;quot; m&amp;ouml;chte ich daher mal ein Beispiel zeigen.&lt;br /&gt;Zu sehen ist einer der neuen &amp;quot;Rennfahrer&amp;quot;:&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Type TIdentifierRacer Extends TCodeRacer&lt;br /&gt;	Field length:Int=0&lt;br /&gt;	Rem&lt;br /&gt;		bbdoc: gibt zur&amp;uuml;ck, ob die &amp;Uuml;berpr&amp;uuml;fung weitergef&amp;uuml;hrt werden soll&lt;br /&gt;	EndRem&lt;br /&gt;	Method Check:Int(char:String,parToken:TToken)&lt;br /&gt;		char=char.toLower()&lt;br /&gt;		If (char&amp;lt;&amp;gt;&amp;quot;_&amp;quot;) 'von Anfang an erlaubte Zeichen: &amp;quot;_&amp;quot; und Buchstaben&lt;br /&gt;			If (char&amp;lt;&amp;quot;a&amp;quot;) Or (char&amp;gt;&amp;quot;z&amp;quot;)&lt;br /&gt;				If (char&amp;lt;&amp;quot;0&amp;quot;) Or (char&amp;gt;&amp;quot;9&amp;quot;) Or (length=0) 'nach dem Anfang erlaubt: Zahlen&lt;br /&gt;					Return False&lt;br /&gt;				EndIf&lt;br /&gt;			EndIf&lt;br /&gt;		EndIf&lt;br /&gt;		length:+1&lt;br /&gt;		Return True&lt;br /&gt;	EndMethod&lt;br /&gt;	&lt;br /&gt;	Rem&lt;br /&gt;		bbdoc: gibt - wenn m&amp;ouml;glich - den Token zum angegebenen Code zur&amp;uuml;ck, nachdem keiner der CodeRacer die &amp;Uuml;berpr&amp;uuml;fung f&amp;uuml;r diesen Token fortf&amp;uuml;hren m&amp;ouml;chte&lt;br /&gt;	EndRem&lt;br /&gt;	Method CreateToken:TToken(code:String,parToken:TToken)&lt;br /&gt;		If code.length=length&lt;br /&gt;			Return TToken.Create(TBMXParser.TYP_IDENTIFIER,Null,code)&lt;br /&gt;		EndIf&lt;br /&gt;	EndMethod&lt;br /&gt;	&lt;br /&gt;	Rem&lt;br /&gt;		bbdoc: setzt den CodeRacer zur&amp;uuml;ck&lt;br /&gt;	EndRem&lt;br /&gt;	Method Reset()&lt;br /&gt;		length=0&lt;br /&gt;	EndMethod&lt;br /&gt;EndType[/syntax]&lt;br /&gt;Wie man schon am Namen erkennt, ist dieser Code f&amp;uuml;r Identifier zust&amp;auml;ndig.&lt;br /&gt;Hier ist &amp;uuml;brigens der Pseudocode des eigentlichen Algorithmus:&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox1&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('1')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox1&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('1')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox1&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('1');&quot;&gt;Gehe vom Startpunkt aus Zeichen f&amp;uuml;r Zeichen vorw&amp;auml;rts.&lt;br /&gt;&amp;nbsp;&amp;Uuml;berpr&amp;uuml;fe alle noch aktiven Rennfahrer und deaktiviere die, die nicht mehr weiter machen wollen. &amp;#40;-&amp;gt;Check&amp;#41;&lt;br /&gt;&amp;nbsp;Wenn kein Rennfahrer aktiv ist...&lt;br /&gt;&amp;nbsp; Gehe Zeichen f&amp;uuml;r Zeichen zur&amp;uuml;ck, solange kein Token gefunden wurde. &amp;#40;w&amp;auml;re optimierbar&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Versuche, aus einem der deaktivierten Rennfahrer einen Token herauszubekommen, setze dann den Startpunkt neu und beende diese Schleife. &amp;#40;-&amp;gt;CreateToken&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Wenn man wieder beim Startpunkt angekommen ist, wird das Parsen beendet und nach Wunsch eine Fehlermeldung ausgegeben bzw. nur Null zur&amp;uuml;ckgegeben. &amp;#40;Exceptions aus den Rennfahrerobjekten werden auch nach Wunsch weitergeleitet.&amp;#41;&lt;br /&gt;&amp;nbsp; Setze alle Rennfahrer zur&amp;uuml;ck. &amp;#40;-&amp;gt;Reset&amp;#41;&lt;br /&gt;Gebe die entstandene Tokenliste zur&amp;uuml;ck.&lt;/div&gt;&lt;br /&gt;Ich bin im Moment ziemlich zufrieden mit dem Ergebnis.&lt;br /&gt;Immerhin habe ich jetzt auch eine bessere M&amp;ouml;glichkeit, Syntaxfehler zu finden und zu melden.&lt;br /&gt;Hierf&amp;uuml;r nutze ich die schon oben genannten Exceptions, welche sich auch aus der Funktion heraus leiten lassen.&lt;br /&gt;Das war es erst einmal.&lt;br /&gt;&lt;br /&gt;Zu den gestern schon angesprochenen Modulen und Codes verrate ich auch schon einmal etwas:&lt;br /&gt;Die Probleme, ein Ziel zu treffen, sollten hiermit ein Ende haben.  &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt; &lt;br /&gt;&lt;br /&gt;Bis zum n&amp;auml;chsten Eintrag!&lt;br /&gt;mpmxyz</description>
			<pubDate>Sat, 21 Aug 2010 10:46:55 +0200</pubDate>
		</item>

		<item>
			<title>ein Schritt zurück und ein Sprung vorwärts</title>
			<link>https://www.blitzforum.de/worklogs/302/#2836</link>
			<guid>https://www.blitzforum.de/worklogs/302/#2836</guid>
			<author>mpmxyz</author>
			<description>Ich hatte in den Ferien nicht an meinen Tokenizer weiter arbeiten k&amp;ouml;nnen. (Ich hatte den Code nicht mitgenommen gehabt. -.-)&lt;br /&gt;Die Auszeit hat mir aber die Gelegenheit gegeben, das Projekt zu &amp;uuml;berdenken.&lt;br /&gt;Dabei ist mir aufgefallen, dass ich mit dem Projekt relativ unzufrieden bin.&lt;br /&gt;Daher werde werde erst einmal wieder bei den Token neu anfangen.&lt;br /&gt;Deren Funktionen wurden auf das Notwendigste reduziert; das Mini-Script fiel heraus und es verschwanden mir zu unflexible Klassen.&lt;br /&gt;Daf&amp;uuml;r wurde ein sehr simples, aber mehr als ausreichendes Metadaten-System eingef&amp;uuml;hrt. (Strings werden Objekte zugeordnet.  &lt;img src=&quot;/forum/images/smiles/icon_razz.gif&quot; alt=&quot;Razz&quot; /&gt;)&lt;br /&gt;Nun die wichtigste Nachricht:&lt;br /&gt;Der Parser ist jetzt sehr flexibel und erweiterbar.&lt;br /&gt;Ich habe mich dabei von diesem sch&amp;ouml;nen Tutorial inspirieren lassen:&lt;br /&gt;&lt;a href=&quot;http://dev.xscheme.de/2009/07/eigene-programmiersprache-scriptsprach/&quot; target=&quot;_blank&quot;&gt;http://dev.xscheme.de/2009/07/...iptsprach/&lt;/a&gt; (genauer: Ansatz 4 f&amp;uuml;r den Lexer)&lt;br /&gt;Kurz formuliert kann man den Algorithmus als eine Art Wettrennen bezeichnen:&lt;br /&gt;Dabei treten die ganzen Token-M&amp;ouml;glichkeiten gegeneinander an. (im Modul &amp;quot;TCodeRacer&amp;quot;)&lt;br /&gt;Normalerweise &amp;quot;gewinnt&amp;quot; dabei die M&amp;ouml;glichkeit, die als letztes &amp;quot;aufgegeben&amp;quot; hat.&lt;br /&gt;Falls diese aber feststellt, dass sie unvollst&amp;auml;ndig oder fehlerhaft ist, werden die M&amp;ouml;glichkeiten, die bei k&amp;uuml;rzeren Token m&amp;ouml;glich w&amp;auml;ren, getestet. (Der rein theoretische Worst Case w&amp;auml;re O(n^2*m). In der Praxis liegt man eher bei O(n) bis O(n*m). (n=Codel&amp;auml;nge, m=Anzahl an &amp;quot;Wettfahrern&amp;quot;))&lt;br /&gt;&lt;br /&gt;Die Zeit in den Ferien habe ich &amp;uuml;brigens produktiv genutzt:&lt;br /&gt;Wenn ich den Tokenizer ver&amp;ouml;ffentlichen werde, werde ich zus&amp;auml;tzlich mindestens 9 weitere Module und einige Codes zu Tage bef&amp;ouml;rdern.&lt;br /&gt;&lt;br /&gt;Bis irgendwann!&lt;br /&gt;mpmxyz</description>
			<pubDate>Fri, 20 Aug 2010 20:46:03 +0200</pubDate>
		</item>

		<item>
			<title>Das Ergebnis des If-Spiels: 2 zu 0 für den Tokenizer</title>
			<link>https://www.blitzforum.de/worklogs/302/#2496</link>
			<guid>https://www.blitzforum.de/worklogs/302/#2496</guid>
			<author>mpmxyz</author>
			<description>Bevor ich mich um den Inhalt k&amp;uuml;mmere, bitte ich um eine Schweigeminute:&lt;br /&gt;Ab diesen Tag gibt es zwei Fliegen weniger in dieser Welt.&lt;br /&gt;Eine hungrige Sarracenia hatte sie zum Fressen gern.&lt;br /&gt;&lt;br /&gt;Ich habe mich in der letzten Zeit immer wieder mal mit dem Tokenizer besch&amp;auml;ftigt.&lt;br /&gt;Irgendwann dachte ich, dass ich am Ende angekommen bin, und traf dann auf das hier:&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]SuperStrict&lt;br /&gt;Local a:Int=1,b:Int=2&lt;br /&gt;If a If b&lt;br /&gt;	Print &amp;quot;1&amp;quot;&lt;br /&gt;EndIf&lt;br /&gt;If a While b&lt;br /&gt;	Print b&lt;br /&gt;	b:-1&lt;br /&gt;Wend&lt;br /&gt;If a If b Print &amp;quot;2&amp;quot;;Print &amp;quot;3&amp;quot;&lt;br /&gt;[/syntax]&lt;br /&gt;&lt;br /&gt;Daraus wird endlich das hier:&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox2&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('2')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox2&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('2')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox2&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('2');&quot;&gt;Program&amp;#58; &amp;quot;If-Test2.bmx&amp;quot;&lt;br /&gt;&amp;nbsp;Identifier&amp;#58; &amp;quot;SuperStrict&amp;quot;&lt;br /&gt;&amp;nbsp;NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp;Identifier&amp;#58; &amp;quot;Local&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;a&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;#58;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Identifier&amp;#58; &amp;quot;Int&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;=&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Dec&amp;#58; &amp;quot;1&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;#58; &amp;quot;,&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;b&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;#58;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Identifier&amp;#58; &amp;quot;Int&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;=&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Dec&amp;#58; &amp;quot;2&amp;quot;&lt;br /&gt;&amp;nbsp; NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp;Identifier&amp;#58; &amp;quot;If&amp;quot;&lt;br /&gt;&amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; Letter&amp;#58; &amp;quot;a&amp;quot;&lt;br /&gt;&amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; Identifier&amp;#58; &amp;quot;If&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;b&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot;&amp;nbsp; &amp;nbsp;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;Print&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;String&amp;#58; &amp;quot;1&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Identifier&amp;#58; &amp;quot;EndIf&amp;quot;&lt;br /&gt;&amp;nbsp; NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp;Identifier&amp;#58; &amp;quot;If&amp;quot;&lt;br /&gt;&amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; Letter&amp;#58; &amp;quot;a&amp;quot;&lt;br /&gt;&amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; Identifier&amp;#58; &amp;quot;While&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;b&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot;&amp;nbsp; &amp;nbsp;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;Print&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;b&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot;&amp;nbsp; &amp;nbsp;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;b&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;#58;-&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Dec&amp;#58; &amp;quot;1&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Identifier&amp;#58; &amp;quot;Wend&amp;quot;&lt;br /&gt;&amp;nbsp; NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp;Identifier&amp;#58; &amp;quot;If&amp;quot;&lt;br /&gt;&amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; Letter&amp;#58; &amp;quot;a&amp;quot;&lt;br /&gt;&amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; Identifier&amp;#58; &amp;quot;If&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;b&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;Print&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;String&amp;#58; &amp;quot;2&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;Print&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;String&amp;#58; &amp;quot;3&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp;NewLine&amp;#58; &amp;quot;&amp;quot;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Wer den Token-Code ausf&amp;uuml;hrlich betrachtet findet au&amp;szlig;erdem eine weitere Neuerung:&lt;br /&gt;Angaben, die aus mehreren mit Kommas getrennten Teilen bestehen, werden in ihre einzelnen &amp;quot;Dimensionen&amp;quot; strukturiert. (Local-, Global-, Const- und Field-Deklarationen, Case-&amp;quot;Vorschl&amp;auml;ge&amp;quot; und Eingeklammertes)&lt;br /&gt;Ich arbeite daran, die Strukturierung einstellbar zu machen. (Sollen Klammern strukturiert werden? Was ist mit Deklarationen? ...)&lt;br /&gt;&lt;br /&gt;Ein Ziel, welches ich f&amp;uuml;r den Tokenizer habe, wurde hier noch nicht genannt:&lt;br /&gt;Das, was er mit mehreren ParseLine-Aufrufen einliest, soll 1 zu 1 wieder bei &amp;quot;toCode&amp;quot; herauskommen.&lt;br /&gt;Im Moment klappt das trotz der Struktur ganz einfach.&lt;br /&gt;&lt;br /&gt;F&amp;uuml;r diejenigen, die Zahlen m&amp;ouml;gen, habe ich auch etwas:&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox3&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('3')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox3&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('3')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox3&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('3');&quot;&gt;Zeilen&amp;#58; 999&lt;br /&gt;Zeichen&amp;#58; 27.182&lt;br /&gt;Token&amp;#58; 7.155&lt;br /&gt;Einlesezeit mit Strukturierung&amp;#58; 167 ms&lt;br /&gt;Fehler in der Strukturierung&amp;#58; 0&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Damit ich den letzten Punkt garantieren kann, bitte ich euch, kleine Testcodes mit allen m&amp;ouml;glichen Schikanen und Strukturtests auszudenken.&lt;br /&gt;Als Beispiel kann zum Beispiel dies hier dienen:&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]SuperStrict&lt;br /&gt;Type T{a=2}&lt;br /&gt;	Method A:Int(p1:Int,t2:Test)&lt;br /&gt;		Local c:Int,d:Float&lt;br /&gt;		For Local i2:Int=c Until 100&lt;br /&gt;			Print (i2)+2&lt;br /&gt;		Next&lt;br /&gt;		Function f(a1:Byte,a2:Byte,a3:Byte(t:Int,u:Int,v:Object[]))&lt;br /&gt;			&lt;br /&gt;		EndFunction&lt;br /&gt;	EndMethod&lt;br /&gt;EndType[/syntax]&lt;br /&gt;Dieser Code wird zu dieser Struktur umgewandelt:&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox4&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('4')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox4&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('4')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox4&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('4');&quot;&gt;Program&amp;#58; &amp;quot;Komma-Test.bmx&amp;quot;&lt;br /&gt;&amp;nbsp;Identifier&amp;#58; &amp;quot;SuperStrict&amp;quot;&lt;br /&gt;&amp;nbsp;NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp;Identifier&amp;#58; &amp;quot;Type&amp;quot;&lt;br /&gt;&amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; Letter&amp;#58; &amp;quot;T&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;#58; &amp;quot;&amp;#123;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Letter&amp;#58; &amp;quot;a&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;=&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Dec&amp;#58; &amp;quot;2&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;#125;&amp;quot;&lt;br /&gt;&amp;nbsp; NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; Space&amp;#58; &amp;quot;&amp;nbsp; &amp;nbsp;&amp;quot;&lt;br /&gt;&amp;nbsp; Identifier&amp;#58; &amp;quot;Method&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;A&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;#58;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Identifier&amp;#58; &amp;quot;Int&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;#40;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;p1&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;#58;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Identifier&amp;#58; &amp;quot;Int&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;,&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;t2&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;#58;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;Test&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;&amp;#41;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Identifier&amp;#58; &amp;quot;Local&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;c&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;#58;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Identifier&amp;#58; &amp;quot;Int&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;,&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;d&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;#58;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Identifier&amp;#58; &amp;quot;Float&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Identifier&amp;#58; &amp;quot;For&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Identifier&amp;#58; &amp;quot;Local&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Letter&amp;#58; &amp;quot;i2&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;&amp;#58;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Identifier&amp;#58; &amp;quot;Int&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;=&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Letter&amp;#58; &amp;quot;c&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Identifier&amp;#58; &amp;quot;Until&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Dec&amp;#58; &amp;quot;100&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Space&amp;#58; &amp;quot;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Letter&amp;#58; &amp;quot;Print&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;&amp;#40;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Letter&amp;#58; &amp;quot;i2&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;#41;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;+&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Dec&amp;#58; &amp;quot;2&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Space&amp;#58; &amp;quot;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Identifier&amp;#58; &amp;quot;Next&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Identifier&amp;#58; &amp;quot;Function&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Letter&amp;#58; &amp;quot;f&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;&amp;#40;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Letter&amp;#58; &amp;quot;a1&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;&amp;#58;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Identifier&amp;#58; &amp;quot;Byte&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;,&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Letter&amp;#58; &amp;quot;a2&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;&amp;#58;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Identifier&amp;#58; &amp;quot;Byte&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;,&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Letter&amp;#58; &amp;quot;a3&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;&amp;#58;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Identifier&amp;#58; &amp;quot;Byte&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;&amp;#40;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Letter&amp;#58; &amp;quot;t&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;&amp;#58;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Identifier&amp;#58; &amp;quot;Int&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;,&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Letter&amp;#58; &amp;quot;u&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;&amp;#58;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Identifier&amp;#58; &amp;quot;Int&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;,&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Letter&amp;#58; &amp;quot;v&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;&amp;#58;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Identifier&amp;#58; &amp;quot;Object&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;&amp;#91;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;#93;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;#41;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;#41;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Space&amp;#58; &amp;quot;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Space&amp;#58; &amp;quot;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Identifier&amp;#58; &amp;quot;EndFunction&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Space&amp;#58; &amp;quot;&amp;nbsp; &amp;nbsp;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Identifier&amp;#58; &amp;quot;EndMethod&amp;quot;&lt;br /&gt;&amp;nbsp; NewLine&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; Identifier&amp;#58; &amp;quot;EndType&amp;quot;&lt;br /&gt;&amp;nbsp;NewLine&amp;#58; &amp;quot;&amp;quot;&lt;/div&gt;&lt;br /&gt;Ich danke schon einmal f&amp;uuml;r die Debug-Hilfe!&lt;br /&gt;&lt;br /&gt;Ich w&amp;uuml;nsche auch weiterhin sch&amp;ouml;ne Tage mit entsprechenden Wetter!&lt;br /&gt;mpmxyz</description>
			<pubDate>Sun, 06 Jun 2010 14:24:07 +0200</pubDate>
		</item>

		<item>
			<title>Etwas strukturierter bitte!</title>
			<link>https://www.blitzforum.de/worklogs/302/#2391</link>
			<guid>https://www.blitzforum.de/worklogs/302/#2391</guid>
			<author>mpmxyz</author>
			<description>Das gr&amp;ouml;bste ist &amp;uuml;berstanden.&lt;br /&gt;Mein Kopf raucht nicht mehr.&lt;br /&gt;Zum Gl&amp;uuml;ck gibt es gegen die Abw&amp;auml;rme ein f.e.n.s.t.E.R. *&lt;br /&gt;Da kommen zum Beispiel Fliegen herein.&lt;br /&gt;Die kann man schlagen, mit der Pinzette anheben, herunterfallen lassen, kleben, in Fallen setzen, wieder kleben, herunterfallen lassen, schlagen, mit der Pinzette nehmen und an Pflanzen verf&amp;uuml;ttern.&lt;br /&gt;Ok, das sollte jetzt meine Besch&amp;auml;ftigung in meinem Zimmerchen ausgiebig beschreiben.  &lt;img src=&quot;/forum/images/smiles/icon_twisted.gif&quot; alt=&quot;Twisted Evil&quot; /&gt; &lt;br /&gt;&lt;br /&gt;Nein, ich bin nicht verr&amp;uuml;ckt, ich bin einfach nur froh, dass ich diesen Teil (fast) hinter mir habe.&lt;br /&gt;Warum?&lt;br /&gt;If!&lt;br /&gt;IF!&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]If a.. 'b&lt;br /&gt;Rem&lt;br /&gt;   c&lt;br /&gt;EndRem&lt;br /&gt;=d..&lt;br /&gt;Rem&lt;br /&gt;a EndRem&lt;br /&gt;   e&lt;br /&gt;EndRem&lt;br /&gt;Rem&lt;br /&gt;   f&lt;br /&gt;EndRem&lt;br /&gt;Print &amp;quot;g&amp;quot;[/syntax]&lt;br /&gt;Ein EndIf oder kein EndIf? Das ist hier die Frage!&lt;br /&gt;Mein Tokenizer k&amp;ouml;nnte sie beantworten:&lt;br /&gt;&amp;quot;Nein!&amp;quot;&lt;br /&gt;&lt;br /&gt;Bei der oben und unten angesprochenen Struktur geht es zum Beispiel darum:&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]While a(b[c+1])&lt;br /&gt;   Print &amp;quot;1&amp;quot;&lt;br /&gt;Wend[/syntax]&lt;br /&gt;&amp;gt;&amp;gt;TBMXToken.GenerateTree()&amp;gt;&amp;gt;&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox5&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('5')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox5&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('5')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox5&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('5');&quot;&gt;Program&amp;#58; &amp;quot;If-Test.bmx&amp;quot; &amp;#40;Line&amp;#58; 0,File&amp;#58; &amp;quot;&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp;Identifier&amp;#58; &amp;quot;While&amp;quot; &amp;#40;Line&amp;#58; 1,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot; &amp;#40;Line&amp;#58; 1,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; Letter&amp;#58; &amp;quot;a&amp;quot; &amp;#40;Line&amp;#58; 1,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;#58; &amp;quot;&amp;#40;&amp;quot; &amp;#40;Line&amp;#58; 1,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Letter&amp;#58; &amp;quot;b&amp;quot; &amp;#40;Line&amp;#58; 1,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;#91;&amp;quot; &amp;#40;Line&amp;#58; 1,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Letter&amp;#58; &amp;quot;c&amp;quot; &amp;#40;Line&amp;#58; 1,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;+&amp;quot; &amp;#40;Line&amp;#58; 1,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Dec&amp;#58; &amp;quot;1&amp;quot; &amp;#40;Line&amp;#58; 1,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;#58; &amp;quot;&amp;#93;&amp;quot; &amp;#40;Line&amp;#58; 1,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#58; &amp;quot;&amp;#41;&amp;quot; &amp;#40;Line&amp;#58; 1,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; NewLine&amp;#58; &amp;quot;&amp;quot; &amp;#40;Line&amp;#58; 1,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; Space&amp;#58; &amp;quot;&amp;nbsp; &amp;nbsp;&amp;quot; &amp;#40;Line&amp;#58; 2,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; Letter&amp;#58; &amp;quot;Print&amp;quot; &amp;#40;Line&amp;#58; 2,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot; &amp;#40;Line&amp;#58; 2,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; String&amp;#58; &amp;quot;1&amp;quot; &amp;#40;Line&amp;#58; 2,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; NewLine&amp;#58; &amp;quot;&amp;quot; &amp;#40;Line&amp;#58; 2,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;br /&gt;&amp;nbsp; Identifier&amp;#58; &amp;quot;Wend&amp;quot; &amp;#40;Line&amp;#58; 3,File&amp;#58; &amp;quot;If-Test.bmx&amp;quot;&amp;#41;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Diese ist eigentlich einfach zu erstellen:&lt;br /&gt;Es gibt Token, die eine Ebene tiefer f&amp;uuml;hren, und es gibt Token, die eine Ebene zur&amp;uuml;ck f&amp;uuml;hren.&lt;br /&gt;&lt;br /&gt;Nun kommt aber das f&amp;uuml;r den Anwender sehr angenehme If ins Spiel:&lt;br /&gt;Zitat:&lt;div class=&quot;quotebox&quot;&gt;Es gibt zwei Formen von If. Die eine ist einzeilig und die andere geht &amp;uuml;ber mehrere Zeilen. Das 'Then' kann weggelassen werden.&lt;/div&gt;&lt;br /&gt;So oder &amp;auml;hnlich steht es in den Tutorials.&lt;br /&gt;Doch wenn man dieses Verhalten ohne Unterschied nachahmen m&amp;ouml;chte und nicht gerade den BlitzMax-Compiler-Code zur Hand hat, muss man eine Menge herumprobieren - und denken; immerhin sollte man die Eigenschaften von BlitzMax gezielt untersuchen.&lt;br /&gt;Das alles hat mir einige Stunden Besch&amp;auml;ftigung bereitet, zumal ich zwischendurch erst einmal feststellen musste, dass BlitzMax keine Fehler meldet, wenn es Module kompiliert.&lt;br /&gt;&lt;br /&gt;Jetzt muss ich nur noch einzeilige Ifs zu einer Struktur machen und dann geht es darum, die neue Struktur zu bearbeiten.&lt;br /&gt;Immerhin soll man bei Funktionsaufrufen auch mehr als nur einen Parameter nutzen k&amp;ouml;nnen.&lt;br /&gt;Danach bringe ich dem Parser wahrscheinlich etwas Mathematik bei.&lt;br /&gt;Zur Vollendung bleiben dann noch Methoden, die Funktionen, Methoden und Variablen identifizieren.&lt;br /&gt;&lt;br /&gt;Irgendwann muss ich mir noch einmal &amp;uuml;berlegen, was ich mit diesem Worklog wirklich erreichen m&amp;ouml;chte.&lt;br /&gt;Zwei oder drei der weiter unten stehenden Punkte haben sich n&amp;auml;mlich meiner Meinung nach er&amp;uuml;brigt.&lt;br /&gt;&lt;br /&gt;Bis ich mit das &amp;uuml;berlegt habe, w&amp;uuml;nsche ich euch sch&amp;ouml;ne Tage!&lt;br /&gt;mpmxyz&lt;br /&gt;&lt;br /&gt;P.S.: Hier braut sich einiges an Code zusammen... Den m&amp;ouml;chte ich aber erst einmal sch&amp;ouml;n &amp;quot;verpacken&amp;quot;, bevor ich etwas dazu sage.  &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt; &lt;br /&gt;&lt;span style=&quot;font-size: 9px;&quot;&gt;*) feines, extrem neuartiges und supertolles Etwas mit Rolladen&lt;/span&gt;</description>
			<pubDate>Tue, 18 May 2010 22:23:59 +0200</pubDate>
		</item>

		<item>
			<title>Stille</title>
			<link>https://www.blitzforum.de/worklogs/302/#2145</link>
			<guid>https://www.blitzforum.de/worklogs/302/#2145</guid>
			<author>mpmxyz</author>
			<description>In der letzten Zeit war es ziemlich Still in diesem Worklog.&lt;br /&gt;B&amp;ouml;se Zungen h&amp;auml;tten sogar das Recht gehabt, dass sich gar nichts tut.&lt;br /&gt;Das war in einigen Wochen wirklich der Fall gewesen.&lt;br /&gt;Aber trotzdem hat sich einiges getan:&lt;ul&gt;&lt;li&gt;Der TToken-Type ist fertig.&lt;br /&gt;Das System der regul&amp;auml;ren Token-Ausdr&amp;uuml;cke ist zwar fertig, aber es ist relativ lahm.&lt;br /&gt;Mit einer Modifikation des brl.LinkedList-Moduls habe ich die Geschwindigkeit aber immerhin verzehnfachen k&amp;ouml;nnen.&lt;br /&gt;&lt;li&gt;Von diesem Type ist ein weiterer abgeleitet, der f&amp;uuml;r Programm-Code zust&amp;auml;ndig ist: Der TCodeToken-Type&lt;br /&gt;Er hat folgende Methoden:&lt;ul&gt;&lt;li&gt;ParseLine wandelt eine Codezeile in Token um.&lt;br /&gt;&lt;li&gt;ToCode macht genau das umgekehrte.&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;Ich habe den von dem TCodeToken-Type erbenden TBMXToken-Type erstellt.&lt;br /&gt;Folgendes wird alles schon erkannt: &lt;ul&gt;&lt;li&gt;Strings&lt;br /&gt;&lt;li&gt;Zahlen und deren Schreibweise (hexadezimal, als Float...)&lt;br /&gt;&lt;li&gt;Die Standard-Identifier, wie &lt;a href=&quot;/help/Local&quot; title=&quot;Befehl in der BB Hilfe nachschlagen&quot;&gt;&lt;b&gt;Local&lt;/b&gt;&lt;img src=&quot;/themes/Standard/quicklink.gif&quot; /&gt;&lt;/a&gt;, &lt;a href=&quot;/help/Global&quot; title=&quot;Befehl in der BB Hilfe nachschlagen&quot;&gt;&lt;b&gt;Global&lt;/b&gt;&lt;img src=&quot;/themes/Standard/quicklink.gif&quot; /&gt;&lt;/a&gt; und &lt;a href=&quot;/help/Function&quot; title=&quot;Befehl in der BB Hilfe nachschlagen&quot;&gt;&lt;b&gt;Function&lt;/b&gt;&lt;img src=&quot;/themes/Standard/quicklink.gif&quot; /&gt;&lt;/a&gt; (Es wird sogar die getrennte Schreibweise erkannt.)&lt;br /&gt;&lt;li&gt;und Kommentare&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;Ich habe mich am Syntax-Highlighting versucht: &lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;https://www.blitzforum.de/upload/file.php?id=8000&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;(Man schaue auf die hervorgehobenen Zahlen!)&lt;br /&gt;Die 28 Kilobytes Code wurden in 100 ms geladen und werden fl&amp;uuml;ssig mit einer frei einstellbaren Einr&amp;uuml;cktiefe angezeigt; es gibt zus&amp;auml;tzlich gewaltige Optimierungsm&amp;ouml;glichkeiten.&lt;br /&gt;&lt;li&gt;Ich bin dabei, einen eigenen Code-Cruncher zu schreiben.&lt;br /&gt;Seine Ausgabe beim Crunchen des eigenen Codes sieht so aus:&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox6&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('6')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox6&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('6')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox6&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('6');&quot;&gt;Input&amp;#58; 4935 Bytes&lt;br /&gt;Output&amp;#58; 3359 Bytes&lt;/div&gt;&lt;br /&gt;Das wird demn&amp;auml;chst aber ein besseres Ergebnis, da ich auch die Variablen-/Type-/Funktionsnamen auf ein Minimum komprimieren m&amp;ouml;chte.&lt;br /&gt;Au&amp;szlig;erdem werde ich versuchen, auch das letzte unn&amp;ouml;tige Leerzeichen zu eleminieren. &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;bis zum n&amp;auml;chsten Eintrag&lt;br /&gt;mpmxyz</description>
			<pubDate>Sat, 20 Feb 2010 19:48:35 +0100</pubDate>
		</item>

		<item>
			<title>Am Anfang waren die Token...</title>
			<link>https://www.blitzforum.de/worklogs/302/#2015</link>
			<guid>https://www.blitzforum.de/worklogs/302/#2015</guid>
			<author>mpmxyz</author>
			<description>Nachdem ich nun genug - bis in die tiefe Nacht - mit meinem Weihnachtsgeschenk gespielt habe, setzte ich mich mal an meinen Worklog.&lt;br /&gt;In diesem Eintrag geht es - unschwer am Titel erkennbar -  um das Token-System, welches ein zentraler Bestandteil des Tokenizers ist.&lt;br /&gt;&lt;br /&gt;Auch, wenn man mit den Token vieles anstellen kann, hat jeder von ihnen nur 3 1/2 Eigenschaften:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;einen Typ (ein String)&lt;br /&gt;&lt;li&gt;einen Datenblock (auch ein String)&lt;br /&gt;&lt;li&gt;ein Parent bzw. einen Ober-Token und eine beliebige Anzahl an Childs bzw. Unter-Token&lt;/ul&gt;&lt;br /&gt;Und damit kann man schon alle Code-Strukturen darstellen:&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]If a=b Then c=d Else d=c 'Das ist ein Test.[/syntax]&lt;br /&gt;k&amp;ouml;nnte so zu dem nachfolgenden Token-Baum werden:&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox7&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('7')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox7&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('7')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox7&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('7');&quot;&gt;File&amp;#58; &amp;quot;irgendetwas.bmx&amp;quot;&lt;br /&gt;&amp;nbsp;Line&amp;#58; &amp;quot;1&amp;quot;&lt;br /&gt;&amp;nbsp;If&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; Condition&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Operator&amp;#58; &amp;quot;=&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Variable&amp;#58; &amp;quot;a&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Variable&amp;#58; &amp;quot;b&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; Then&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Assignment&amp;#58; &amp;quot;=&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Variable&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Variable&amp;#58; &amp;quot;c&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Expression&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Variable&amp;#58; &amp;quot;d&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; Else&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Assignment&amp;#58; &amp;quot;=&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Variable&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Variable&amp;#58; &amp;quot;d&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Expression&amp;#58; &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Variable&amp;#58; &amp;quot;c&amp;quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Space&amp;#58; &amp;quot; &amp;quot;&lt;br /&gt;&amp;nbsp;Comment&amp;#58; &amp;quot;Das ist ein Test.&amp;quot;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Anmerkung: Es gibt gewisse Grammatik-Regeln in BlitzMax, bei denen Leerzeichen beachtet werden m&amp;uuml;ssen.&lt;br /&gt;Wenn man au&amp;szlig;erdem einen Precompiler schreibt, kann es von Vorteil sein, dass die Formatierung des bearbeiteten Codes erhalten bleibt.&lt;br /&gt;&lt;br /&gt;Komplexere Strukturen lassen sich mit diesem System &amp;auml;hnlich erstellen; f&amp;uuml;r ein Beispiel fehlt mir aber im Moment eine genauer Plan in diese Richtung.&lt;br /&gt;Erst einmal muss ich n&amp;auml;mlich die regul&amp;auml;ren Ausdr&amp;uuml;cke weiter entwickeln.&lt;br /&gt;&lt;br /&gt;Das war erst einmal alles, was ich zu den Token an sich sagen wollte.&lt;br /&gt;Wie die Token angewendet werden, wird dann in weiteren Eintr&amp;auml;gen bearbeitet.&lt;br /&gt;&lt;br /&gt;bis zum n&amp;auml;chsten Eintrag&lt;br /&gt;mpmxyz </description>
			<pubDate>Fri, 25 Dec 2009 13:24:40 +0100</pubDate>
		</item>

		<item>
			<title>Immer diese Fragen...</title>
			<link>https://www.blitzforum.de/worklogs/302/#2008</link>
			<guid>https://www.blitzforum.de/worklogs/302/#2008</guid>
			<author>mpmxyz</author>
			<description>&lt;span style=&quot;font-size: 20px;&quot;&gt;Was wird das f&amp;uuml;r ein Projekt?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Zuerst werde ich mich in diesem Worklog einem Tokenizer f&amp;uuml;r BlitzMax, an dem ich seit dem 19.12 arbeite, widmen&lt;br /&gt;Da so ein Tokenizer sehr n&amp;uuml;tzlich sein kann, k&amp;ouml;nnten aber auch noch schnell weitere, mehr oder weniger kleine Projekte, die aus dem Tokenizer entstanden sind, hinzukommen.&lt;br /&gt;Man k&amp;ouml;nnte z.B. auf Basis dieses Tokenizers eine BlitzMax-IDE erstellen, BlitzMax-Code interpretieren oder &amp;uuml;bersetzen.&lt;br /&gt;(Mit &amp;Uuml;bersetzen meine ich &amp;uuml;brigens eher etwas, wie einen Precompiler.)&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 20px;&quot;&gt;Was ist das Besondere an diesem Projekt?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ich versuche, den Tokenizer so flexibel wie nur m&amp;ouml;glich zu gestalten, damit es f&amp;uuml;r ihn m&amp;ouml;glichst viele Anwendungsm&amp;ouml;glichkeiten gibt.&lt;br /&gt;So habe ich z.B. in einer halben Stunde einen kleinen Precompiler erstellen k&amp;ouml;nnen, der Code verkleinern kann:&lt;br /&gt;Der Precompilercode wurde von 29 KiB um mehr als 27% auf 21 KiB verkleinert!&lt;br /&gt;&lt;br /&gt;Um diese Einfachheit zu erhalten, habe ich eine sehr simple, aber auch extrem m&amp;auml;chtige Art regul&amp;auml;rer Ausdr&amp;uuml;cke f&amp;uuml;r Token entwickelt.&lt;br /&gt;Damit lassen sich sogar viele Verhaltensweisen des Tokenizers zu Laufzeit &amp;auml;ndern!&lt;br /&gt;&lt;br /&gt;Selbst diese regul&amp;auml;ren Ausdr&amp;uuml;cke werden in Token zerlegt und k&amp;ouml;nnen genau so bearbeitet werden, wie BlitzMax-Code.&lt;br /&gt;Und die Token k&amp;ouml;nnen noch mehr:&lt;br /&gt;Die Kombination aus einem regul&amp;auml;ren Ausdruck und einer dazugeh&amp;ouml;rigen „Ausgabe“ kann in einem Regel-Token gespeichert werden, welcher wiederum mit Hilfe von weiteren Token in einer Gruppe von Regeln gesteckt werden kann.&lt;br /&gt;Alle Regeln/Regelgruppen k&amp;ouml;nnen dann &amp;uuml;ber DEN Ober-Token verkn&amp;uuml;pft werden, um in einem einfachen Befehl verwendet zu werden.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 20px;&quot;&gt;Was wird es zu h&amp;ouml;ren/sehen geben?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;-Ich werde versuchen, bis ins kleinste Detail die Regeln zum Parsen von BlitzMax-Code zu erkl&amp;auml;ren.&lt;br /&gt;-Sobald ich mit den Grundlagen davon fertig bin, werde ich die Syntax meiner Art von regul&amp;auml;ren Ausdr&amp;uuml;cken erkl&amp;auml;ren und mit dem ersten Punkt weiter machen.&lt;br /&gt;-Das, was ich mit dem Tokenizer so mache, kommt auch ab und zu hier herein.&lt;br /&gt;-Wenn ich den Code genug dokumentiert habe, kommt er auch hier herein, weil mir die M&amp;ouml;glichkeiten des Projekts sonst zu Schade daf&amp;uuml;r sind, dass er nur auf meiner Festplatte liegt.&lt;br /&gt;-Wenn jemand eine n&amp;uuml;tzliche Regel/Regelgruppe gefunden hat, kann diese auch dann auch hier auftauchen.&lt;br /&gt;&lt;br /&gt;Das Erste, was ich erkl&amp;auml;ren werde, sind die Token selbst.&lt;br /&gt;Um hier allerdings alles &amp;uuml;bersichtlich zu halten, wird das erst im n&amp;auml;chsten Eintrag stehen.&lt;br /&gt;&lt;br /&gt;bis zum n&amp;auml;chsten Eintrag&lt;br /&gt;mpmxyz</description>
			<pubDate>Wed, 23 Dec 2009 20:41:34 +0100</pubDate>
		</item>


	</channel>
</rss>
