Forum: Mikrocontroller und Digitale Elektronik Funktionsweise eines (Basic) Interpreters gesucht


von Tubie (Gast)


Lesenswert?

Hallo zusammen,
ich habe hier mal wieder eine Idee und weiß nicht so recht, ob das was 
werden könnte...

Bin hier immer noch damit beschäftigt, die Software für meine 
Heizungssteuerung zu schreiben. Da ich leider nur ASM kann ist das ganze 
von der späteren erweiterbarkeit, ohne den Code zu ändern sehr schlecht 
möglich.

Jetzt habe ich mir überlegt, eine art "Basic" interpreter zu schreiben. 
Dieser ist natürlich sehr abgespeckt und kennt auch nur Befehle die zur 
Steuerung der Anlage interessant sind. Soll dann alles über V.24 
(Terminalprogramm) gesteuert werden. Ein 4x20 LCD zeigt entsprechende, 
Programmierte Anlagendaten an. Geschriebene Programme können dann auf 
einer SD/MMC Karte gespeichert und geladen werden. Dies kann dann auch 
zum aufzeichnen eines Log Files dienen.

Wenn ich jetzt eine Zeile in den Puffer hole, muß diese erst zerlegt 
werden, auf Fehler überprüft werden und ausgeführt werden. Bei einfachen 
Befehlen wie "RELAIS X:=1" -> Relais x einschalten kein Problem.

Wie geht man aber am besten bei einer IF THEN Anweisung ran? Es gibt ja 
mehrere varianten, die erkannt werden müssen. Bsp:

IF X > 1 THEN PUMPE N:=1
IF X = Y THEN GOTO 20
IF (X-5) = 2 THEH Z:=12

oder Mathematische Operationen

X:=(Z+3)*Y-5*2

Ist im Prinzip eine ganz einfache Taschenrechner Punkt vor Strich 
rechnung mit Klammer.

Wie kann man soetwas realisieren? Ist ja im prinzip nichts neues konnte 
der ZX81 glaub ich auch schon alles.

Bin für jeden Tipp/Link dankbar, denn ich denke das dies die Lösung 
meines Problemes mit der Erweiterbarkeit der Steuerung ist. Jedes 
Relais, jeder PWM Kanal, jeder Temp Sensor  Raumfühler  LCD bekommt 
eine Adresse auf dem RS-485 Bus zugewiesen und ist vom Interpreter dann 
unter dieser ansprechbar.

Da es sich hier 'nur' um eine Heizungssteuerung/Temperaturregelung 
handelt, spielt Geschwindigkeit eine sehr untergeordnete Rolle.

Viele Grüße und besten dank im voraus,
Tubie


von Muse (Gast)


Lesenswert?


von Marvin (Gast)


Lesenswert?

"Compilerbau" von Niklaus Wirth. Dort ist ein Parser für Ausdrücke 
drinnen.

von Joerg W. (joergwolfram)


Lesenswert?

Ich hatte für meinen BASIC-Computer (AVR-Chipbasic) als allererstes 
einen Parser geschrieben. Dazu habe ich einen Algorithmus zur 
Infix-Postfix Konvertierung benutzt. Nur anstelle die Zeichen auszugeben 
habe ich die Zahlen auf einen Stack geschrieben und die Operatoren 
ausgeführt. Funktionen wie ABS() funktionieren wie einfache Klammern, 
nach dem Schliessen der Klammer wird dann noch zusätzlich die Funktion 
(hier Absolutwert bilden) ausgeführt. Allerdings lassen sich auf diese 
Weise nur Funktionen mit einem Argument realisieren.
Zur Ausführung ist es am einfachsten, wenn die Schlüsselwörter bereits 
durch Token ersetzt sind. Dazu kann man festlegen, dass bei Token Bit 7 
gesetzt ist und dadurch die Abarbeitung noch etwas beschleunigen. Die 
Zeile wird in einen Puffer kopiert und dann Zeichen für Zeichen 
abgearbeitet. Für jeden Token gibt es dann einen eigenen kleinen 
Programmteil, der bei IF in etwa so aussieht:

1. Setze den Pointer auf das erste Nichtleerzeichen nach IF
2. Rufe den Parser auf
3. ist das Ergebnis 0 (oder falsch), dann mache mit nächster Zeile 
weiter
4. Suche das nächste Nichtleerzeichen
5. Ist es ein "THEN" Token, ignoriere ihn einfach

Gruß Jörg


von Oliver (Gast)


Lesenswert?

Beitrag "BASIC-Computer mit Mega32"

oder als SPS:
Beitrag "SPS Betriebssytem"

Oliver
P.S. UVR 1611 :-)

von Sigint 112 (sigint)


Lesenswert?

Hier hab ich einen interesannten Link zum Thema Infix->Postfix - 
Umwandlung:
http://www.cz.j.th.schule.de/html_inc/schule/lehrer/privat/mirko_koenig/postfix/postfix.htm
Da steht beschrieben, wie man mathematische Ausdrücke berechnen kann:
Einfach von Infix nach Postfix wandeln und dann den Postfix-Ausdruck 
berechnen. Das ist wohl ganz einfach erweiterbar, man muss nur die 
Reihenfolge der Operatoren beachten... Punkt vor Strich,usw.

Gruß,
  SIGINT

von Tubie (Gast)


Lesenswert?

Wow!
Danke erstmal für die vielen, nützlichen Tipps. Da habe ich jetzt 
erstmal genug Lesestoff bis zum Wochenende. Dann will ich mal das AVR 
Studio starten und sehen, was sich machen lässt. Wenn ich noch fragen 
habe, melde ich mich auf jeden Fall nochmal.

Dickes Dankeschön,
Tubie

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.