Einfacher php-artiger Parser ?

Gast #558231
Lesenswert?

Tach miteinander,

ich möchte mir für einen µC-Webserver (läuft bereits) einen einfachen 
Parser programmieren, der nach Tags in einer Templatedatei sucht und 
diese entsprechend interpretiert.
Hier mal einfach eine Template-Beispiel, was der Parser dann können 
sollte (Pseudocode)
1
<? //Leitet einen zu interpretierenden Code ein
2
ECHO "Kanal 1:"; //Textausgabe zum Browser
3
ECHO GETINPUT(1); //Schreibt den Wert von Input 1 zum Browser
4

5
IF (GETADC(5) > 100) SETOUTPUT(2); //Schaltet Ausgang 2 ein, wenn ADC 5 > 100
6

7
IF (GETPARAM("TEST") == "EIN") CLEAROUTPUT(1); //Schaltet Ausgang 1 aus, wenn in der URL der Parameter "TEST" = "EIN"
8
?> //Ende des zu interpretierenden Codes

Kann mir jemand "konzeptionelle Hilfestellung" geben, wie man sowas (in 
C++) realisieren kann ?

Schöne Grüße
Stefan
Gast #559991
Lesenswert?

Moin!

Habe mal auf beide Sachen ("Lex/Yacc" und "Spirit") angesehen. Also mit 
Lex/Yacc kann ich leider überhaupt kein Land gewinnen, da steh' ich 
völlig im Wald und weiß nicht wo oben und unten ist. Mit Spirit habe ich 
ein wenig (mit dev-cpp unter win) experimentiert, und konnte wohl ein 
paar "rules" erstellen, die erfolg reich geparst wurden. Beim Einbinden 
von Funktionsobjekten happerts aber dann wieder, das geht ja in Richtung 
"Psychopaten-C++" ;-)

>Aber Vorsicht, das ist nichts für Weicheier, die vor template meta
>programming zurückschrecken. ;-)

Davor schrecke ich nicht zurück, weil ich nicht weiß was "template meta 
programming" ist :-[ (aber ich weiß inzwischen dass man davon Kopfweh 
bekommt)
Dann stellt sich schließlich noch die Frage wie groß meine Applikation 
mit so einem Monsterkoboldalien wird, es soll auf einem Beck-IPC SC12 
laufen. So vom Gefühl her ist der Apparat eher für die Abteilung PC 
gedacht ?

Stevinger
#560206
Lesenswert?

Noch so als Tip:

Dein µC wird warscheinlich nicht genug Speicher haben um das alles 
selbst zu machen. (Scanner, Parse-Tables, Parse-Baum im RAM halten, 
Ausführen des Parse-Baums, etc)

Ich würde (bzw werde, sobald den Mega16 in meinem Webserver duch nen 
32er ausgetauscht habe) das so machen:
Auf dem PC mit einem Mini-compiler (mit lex/flex/yacc/bison, antLR, ...) 
schreiben, der die HTML-Seite (mit den Script-Elementen) in einen 
Byte-Code umsetzt, der dann auf der µC seite in einer kleinen 
Stack-Maschine (Forth-like) ausgeführt wird.

Da gehen dann auch Funktionsdeklarationen, Rekursion, Schleifen, lokale 
Variablen etc. mit geringem Speicher/Flash verbrauch am µC.

/Ernst
Moderator Persönliche Seite #560679
Lesenswert?

Ich habe mal flex + byacc so umgebaut, dass all ihre Tabellen im
Flash-ROM eines AVR ablegen.  Ein simpler Scanner/Parser damit
erzeugt ein ,,Grundrauschen'' von so um die 20 KiB an Code (und
nicht mehr allzu viel an RAM).  Mit einem einigermaßen aufgebohrten
BASIC-Interpreter, den ich dann zum Spaß mal damit geschrieben habe,
waren es so ca. 30 KiB an ROM (da war dann schon Gleitkommaarithmetik
mit dabei).

Also wenn man eine eher komplexe Grammatik umsetzen will und einen
nicht ganz kleinen Controller dafür zur Verfügung hat, ist das schon
im machbaren Bereich.

Coco müsste man sich mal angucken.  Rekursiven Abstieg habe ich noch
irgendwo im Ohr aus Zeiten, da ich mich mal ein wenig mit den
Grundlagen des Compilerbaus befasst habe.  Nicht jede Grammatik taugt
dafür, meiner Erinnerung nach kann man damit z. B. kein C
implementieren aber Pascal.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren