www.mikrocontroller.net

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


Autor: Tubie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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


Autor: Muse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Marvin (Gast)
Datum:

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

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht 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


Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beitrag "BASIC-Computer mit Mega32"

oder als SPS:
Beitrag "SPS Betriebssytem"

Oliver
P.S. UVR 1611 :-)

Autor: Sigint 112 (sigint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier hab ich einen interesannten Link zum Thema Infix->Postfix - 
Umwandlung:
http://www.cz.j.th.schule.de/html_inc/schule/lehre...
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

Autor: Tubie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.