Ich bin im Umgang mit PHP kein Einsteiger, aber habe nun die Anforderung einen Parser für eine eigene kleine Syntax zu erzeugen. Dabei soll eine Definitionssprache für die Verarbeitung von SQL Datensätzen erkannt, geprüft und in SQL Befehle umgewandelt werden. Verschachtelungen, Funktionen oder Sprünge sind nicht vorgesehen, die Befehle werden durch Zeilenschaltungen getrennt, die einzelnen Optionen durch Komma bzw Leerzeichen.
Ich habe versucht mich im Internet in das Thema einzulesen, aber nicht wirklich alles verstanden. Ich fürchte ich benötige einen Mentor, der mich schritt für schritt an die Lösung heranführt.
Hier mal, was ich soweit meine verstandeb zu haben. Bitte gern kommentieren oder berichtigen!
Um eine Syntax zu erfassen sind mehrere Durchläufe (Pass) notwendig.
Im ersten liest man Zeichen für Zeichen ein und versucht daraus sog. Tokens zu erzeugen.
Diese repräsentieren die einzelnen Elemente der Sprache.
Aus einem Befehlstext wie "sort by" kann z.B. ein Token "T_SORTBY" werden. Aus einem Zuweiser "=" wird ein T_EQUAL, einem String ein T_STRING, usw. Einige Tokens haben Werte, andere nicht.
Aus dem Tokenizer (wohl auch Lexer genannt) kommt dann eine Liste von Token/Wert Paaren.
Der Tokenizer prüft nicht die Syntax, löst aber Sprachhilfskonstrukte wie Kommentare, Whitespace, Multilines, Escapezeichen auf.
Anschließend folgt der Parser und versucht aus den Tokens schlau zu werden. Er prüft die Syntax und fasst die Tokens zu Sprachelementen zusammen.
Zuletzt kommt noch der Compiler, welcher diese Elemente in den Zielcode umwandelt, in meinem Fall SQL.
So, da ich noch weit vom Code entfernt bin, können wir auf der theoretischen Ebene bleiben. Später wären kleine Codeschnippsel natürlich hilfreich, bzw. die Diskussion meines Codes. Bitte keine fertigen Libraries zitieren. Die sind zwar sicher nützlich, aber ich will es erstmal begreifen und das geht am besten wenn man es selber macht. Mit eurer Hilfe natürlich... hoffentlich
Ich danke schonmal im Voraus,
Oli
Ich habe versucht mich im Internet in das Thema einzulesen, aber nicht wirklich alles verstanden. Ich fürchte ich benötige einen Mentor, der mich schritt für schritt an die Lösung heranführt.
Hier mal, was ich soweit meine verstandeb zu haben. Bitte gern kommentieren oder berichtigen!
Um eine Syntax zu erfassen sind mehrere Durchläufe (Pass) notwendig.
Im ersten liest man Zeichen für Zeichen ein und versucht daraus sog. Tokens zu erzeugen.
Diese repräsentieren die einzelnen Elemente der Sprache.
Aus einem Befehlstext wie "sort by" kann z.B. ein Token "T_SORTBY" werden. Aus einem Zuweiser "=" wird ein T_EQUAL, einem String ein T_STRING, usw. Einige Tokens haben Werte, andere nicht.
Aus dem Tokenizer (wohl auch Lexer genannt) kommt dann eine Liste von Token/Wert Paaren.
Der Tokenizer prüft nicht die Syntax, löst aber Sprachhilfskonstrukte wie Kommentare, Whitespace, Multilines, Escapezeichen auf.
Anschließend folgt der Parser und versucht aus den Tokens schlau zu werden. Er prüft die Syntax und fasst die Tokens zu Sprachelementen zusammen.
Zuletzt kommt noch der Compiler, welcher diese Elemente in den Zielcode umwandelt, in meinem Fall SQL.
So, da ich noch weit vom Code entfernt bin, können wir auf der theoretischen Ebene bleiben. Später wären kleine Codeschnippsel natürlich hilfreich, bzw. die Diskussion meines Codes. Bitte keine fertigen Libraries zitieren. Die sind zwar sicher nützlich, aber ich will es erstmal begreifen und das geht am besten wenn man es selber macht. Mit eurer Hilfe natürlich... hoffentlich
Ich danke schonmal im Voraus,
Oli
Kommentar