Laden...

PHP Syntax erkennen, prüfen und auswerten.

Erstellt von DatMilu vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.257 Views
D
DatMilu Themenstarter:in
21 Beiträge seit 2013
vor 10 Jahren
PHP Syntax erkennen, prüfen und auswerten.

Hallo Leute,
Ich habe ein Problem, und zwar bekomme ich auf meine Server-Anwendung PHP-Scripts zugeschickt. Ich habe diese so zerteilt, das ich immer nur einen Befehl bzw Zeile habe.

Ein solcher Eintrag könnte folgendermassen aussehen.

$MyClass.MyFunction("Argument", true)

oder

if ($int >= 1337)

oder

$Var = "Ein Wert"

und noch viele verschiedene Varianten.
(Semikolons sind übrigens absichtlich nicht drinnen.)

Gibt es eine möglichkeit, die Syntax zu prüfen, zu erkennen um was es sich bei einem Befehl handelt und dann bei Zuweisungen z.B. den zugewiesenen Wert in eine Variable zu speichern oder bei einem Befehl, die Argumente? (Zuweisung, Abfrage usw...)

Ich habe bisher nur eine Funktion geschrieben die mir die Argumente liefert, jedoch ist sie nicht sehr gut da auch Kommas innerhalb eines Strings im Argument auch als Trennzeichen gesehen werden und und und...

Leider finde ich keinen Weg, wie ich mein vorhaben realisieren könnte ohne den schlechtesten Code der Welt zu schreiben. Ausserdem will ich dies ja für die meisten Scripter brauchbar machen können und da müsste ich auch noch irgendwie unnötige Leerzeichen ignorieren können wie z.B. bei "if (...".

Über eine Hilfe, Tipps oder schon nur den richtigen ansatz würde ich mich sehr freuen. 😄

MfG

C# - Mittelmässig
vb.NET- Fortgeschritten
PHP - Profi
HTML, CSS, JavaScript (jQuery) - Profi

M
334 Beiträge seit 2007
vor 10 Jahren

Mit String.Split() kommst du da nicht weit, bzw. es wird irgendwann sehr unübersichtlich.

Ein paar Stichworte hab ich für dich: 🙂

Compilerbau
EBNF
ANTLR

Willst du einen PHP-Compiler bauen?

1.346 Beiträge seit 2008
vor 10 Jahren

Und was ist mit sowas?


if(($i = 5) > 6){...}

Das Thema ist weitaus komplizierter als du denkst. Was willst du denn damit erreichen?

D
DatMilu Themenstarter:in
21 Beiträge seit 2013
vor 10 Jahren

Mit String.Split() kommst du da nicht weit, bzw. es wird irgendwann sehr unübersichtlich.

Ein paar Stichworte hab ich für dich: 😃


>


>


>

Willst du einen PHP-Compiler bauen?

Danke, werde mir die Sachen Mal ansehen. Habe mir so ein Compile-System mal angesehen, da ich mir schon dachte, dass es in die richtung gehen könnte.

Aber nein, es wird kein Compiler, soll mir nur einige Sachen ordnen und prüfen ^^

Und was ist mit sowas?

  
if(($i = 5) > 6){...}  
  

Das Thema ist weitaus komplizierter als du denkst. Was willst du denn damit erreichen?

Der Quellcode wird in einer List<string> gespeichert und es werden somit wie Zeilen Simuliert. Den ganzen Code habe ich vorhin noch mit einer Beautify-Funktion strukturieren lassen. Egal wie der Input ist, es wird immer so eine Liste erstellt:

List<string> Source
|- <?php
|- echo "Willkommen"
|- if (a == b)
|- {
|- $Do->Something()
|- {
|- ?>

Wenn noch einer nen Plan hat, wäre ich ihm dankbar diesen zu hören^^

MfG

Edit: (Struktur Korrigiert) Unnötige Leerzeichen vor dem eigentlichen Befehl werden weg gelassen.

C# - Mittelmässig
vb.NET- Fortgeschritten
PHP - Profi
HTML, CSS, JavaScript (jQuery) - Profi

E
180 Beiträge seit 2010
vor 10 Jahren

als erstes solltest du dir mal die php doku angucken, grade was die tokens und reserved words angeht. weil anhand dessen kannst du die zeilen analysieren, nur ich sag dir gleich das wird kein leichtes unterfangen und wird ne hohe fehlerquote haben, abhängig vom benutzer der den code eingibt. je mehr erfahrung der nutzer der hat desto mehr entscheidungsbäume hast du zu berücksichtigen. stellt sich also die frage z.b. welche php version willst du unterstützen, denn das alleine macht schon imense unterschiede in der syntax bei den tokens aus (und damit ist nich gemeint ob v4 oder v5).

Gruß

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo DatMilu,

du willst einen (kompletten!?) PHP-Interpreter programmieren? Wenn ja, dann viel Spaß. Allerdings hätten wir dann wirklich besseres zu tun, als dir bei solchem Unsinn zu helfen.

herbivore

D
DatMilu Themenstarter:in
21 Beiträge seit 2013
vor 10 Jahren

Ich will keinen Interpreter für PHP programmieren.
Ich will nur den String halbwegs auf fehler prüfen können, und dann die Werte (Klassen, Funktionen, Argumente) abspeichern.

Bräuchte eigentlich nur beim auf fehler prüfen hilfe denn ich sehe da keinen weg wie ich es realisieren könnte.

MfG

C# - Mittelmässig
vb.NET- Fortgeschritten
PHP - Profi
HTML, CSS, JavaScript (jQuery) - Profi

799 Beiträge seit 2007
vor 10 Jahren

Vielleicht findest du irgendwo die Grammatik. Dann würde es ein Lexer auch tun um "halbwegs auf Fehler" zu prüfen. Vielleicht hilft dir der SO-Post.

Ich persönlich habe nur mit Antlr und Yacc gearbeitet und um so etwas zu erreichen was du möchtest muss man keinen kompletten Parser schreiben. So wie du deine Frage formuliert hast, erlaube ich mir zu schließen, dass du kaum Erfahrung mit Compiler-Compiler hast. Antlr 4 (und das dazugehörige Bucj "The Definitive ANTLR 4 Reference" by Terence Parr) wird dir da sehr entgegen kommen. Du müsstest dich zwar etwas einarbeiten und mit Java arbeiten aber das was du vorhast ist realistisch betrachtet in ca. 20h (ohne Vorerfahrung mit fundierter Kenntnis von C#) machbar.

Da kannst du dann einen Listener definieren der jedesmal bei einer Zuweisung feuert.

As a man thinketh in his heart, so he is.

  • Jun Fan
    Es gibt nichts Gutes, außer man tut es.
  • Erich Kästner
    Krawutzi-Kaputzi
  • Kasperl
D
152 Beiträge seit 2013
vor 10 Jahren

Schau dir mal den Link an.

http://php.net/manual/de/function.php-check-syntax.php

Geht zwar über eine Datei sollte die Aufgabe aber erfüllen.