c't

c't-Projekte - Mailinglisten


[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

[ct-bot] Basic-Interpreter (für c't - Bot)

Absender: Uwe Berger
Datum: Do, 02.12.2010 16:17:37


MoinMoin,

ich will mal den Thread von Frank M. aufgreifen, der letztens den
Basic-Interpreter für euren Bot ins Gespräch gebracht hat.

Ich selbst bin der Entwickler dieses Interpreters, habe selbst keinen Bot
(und auch keine Ambitionen dazu ...;-), bin aber schon daran interessiert,
dass mein Interpreter ein Referenzprojekt bekommt. Der c't-Bot hat ja eine
weite Verbreitung...

Warum habe ich mich an dieser Liste angemeldet? Frank und ich sind
Kollegen, sprechen also auch mal öfters zusammen. Ich habe vor ein paar
Tagen eine neue Version des basic-Interpreters veröffentlicht, die das,
hier auch diskutierte, Problem des Einlesens von Basic-Programmen behebt.

http://www.mikrocontroller.net/svnbrowser/avr-basic/
(Der Zweig, der mit meinem Namen bezeichnet ist...)

Frank bat mich darum dies selbst mal hier zu erklären, was neu ist:

In der neuen Version ist es vollkommen egal, von welchem "Medium" das
Basic-Programm eingelesen wird. Vor allem wird nicht mehr ein Puffer im
RAM benötigt, das Einlesen erfolgt Byte-weise vom jeweiligen
Speichermedium (ja, ist mir wirklich gelungen, dazu war nur ein kleiner
Trick in tokenizer.c notwendig...!).
Dreh- und Angelpunkt ist dabei eine Schnittstelle die als Defines
realisiert ist und in den Dateien tokenizer_access.* zu finden ist. Die
dortigen Defines sind von der Sache her einfach nur umzudefinieren, je
nach seinem eigenen internen Routinen für die Mediumzugriffe. Ich denke
der Quelltext dort ist ausreichend kommentiert in der Doku im Archiv
(Kapitel 5) gibt es eine ausführlichere Beschreibung. Desweiteren sind 3
Beispiele für unterschiedliche Speichermedien ausgeführt:
* Zugriff wie in den bisherigen Versionen über einen Speicherbereich im RAM
* Basic-Programm im PROGMEM des AVR
* Basic-Programm in einer Datei und Zugriffe über fread(), fseek()...,
allerdings libc und für eine Linux-Plattform.

Zum Aufzeigen der Funktionsweise sollte es aber reichen, gerade das
3.Beispiel dürfte am interessantesten sein...

In der neuesten Version gibt es auch noch ein paar kleine Verbesserungen
beim Basic-Syntax. Ich verweise mal auf das EBNF ganz hinten in der Doku,
welches den vollständigen realisierten Syntax widerspiegelt.

Für Fragen stehe ich gern zur Verfügung, sage aber gleich, dass ich keine
spezielle Anpassungen für den c't-Bot einbauen werde (es sei denn, die
sind auch für andere Plattformen interessant). Speziell meine ich dabei
z.B. die PRINT-Anweisung, da gab es schon heftige Diskussionen mit
Frank...:-).

Grüße (und an Erfahrungsaustausch interessiert),
Uwe Berger