Einfacher Formelparser in SCL

Beiträge
9.189
Reaktionspunkte
2.936
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe die Tage mal einen einfachen Formelparser für arithmetische Ausdrücke in SCL programmiert.
Es gab dazu keinen konkreten Hintergrund. Ich hatte das Programm vorher in C geschrieben, und wollte einfach mal
sehen ob und wie man das in SCL in einer SPS umsetzen kann.

Der Parser verarbeitet Formeln wie z.B. "5*(102+a)/b", die als String eingegeben werden müssen.
Es sind vier Variablen möglich (a, b, c und d) deren Werte im Interpreter durch die Werte der Funktionsparameter ersetzt werden.
Ist die Formel korrekt, so wird der Ausdruck berechnet und das Ergebnis der Berechnung zurückgegeben.

Das Programm ist in starker Anlehnung an Niklaus Wirths PL/0 Parser aus dem Buch "Compilerbau" aus dem Jahre 1986 geschrieben.
Frei im Netz verfügbar ist das etwas neuere Buch von Wirth, "Compiler Construction".

Der Parser übersetzt die Formel durch rekursiven Abstieg in Code in einer sehr einfachen Sprache mit 3 Befehlen, der später durch eine Stackmaschine ausgeführt wird.

Durch die Rekursion ergeben sich in einer S7-SPS aufgrund der begrenzten Schachtelungstiefe (z.B. 16 bei einer S7-300) Grenzen bei der maximalen Klammeranzahl.
Pro Klammerebene erhöht sich die Schachtelungstiefe um 3. Im aktuellen Code wird das nicht geprüft.
Was eine echte SPS macht denn die Schachtelungstiefe überschritten wird habe ich noch nicht getestet, ich schätze mal es wird in den Stop-Zustand gewechselt.

Ich habe den Code und ein paar weitere Infos in dem angehängten PDF zusammengefasst. Frei zur Kommentierung sozusagen :)

PS
Ich hatte erst gedacht dass es eine schöne Aufgabe für den Programmierwettbewerb wäre. Aber dann hab ich selber doch ein paar Stunden
daran gesessen...

Anhang anzeigen Formelparser-SCL-Code.pdf
 
Zurück
Oben