Eingabe in Code umwandeln



  • Hallo,

    Ist es möglich einen eingegebenen String so umzuformatieren, dass das Programm es tatsächlich ausführen kann wenn ich alle Variablen dann vorneherein abgegeben habe?

    Beispiel:

    ich hab den string

    "a=a%b

    und vorher

    int a=4 , b=5;

    deklariert

    und ich hätte gerne dass das programm diesen String als code compiliert

    Die Frage wurde bestimmt schonmal vorher gestellt, aber ich kenn mich mit der navigation dieses Forums nicht so gut aus. Entschuldigung schonmal im vorraus an der Stelle.

    Dankeschön



  • @Rarrocks
    Willst Du eine Interpreter bauen?



  • wenn man das so nennt dann ja



  • Nein, das geht mit C++ nicht. Die Namen "a" und "b" der Variablen a und b exisitieren nicht im compilierten Programm.

    Wenn du sowas machen willst, dann

    • solltest du wahrscheinlich etwas ganz anderes machen (z.B. Variablen in Dict speichern, eigenen Parser schreiben, ...)
    • könntest du eine Scriptsprache nehmen, die nicht kompiliert ist (aber auch dort, obwohl es geht, ist das selten eine gute Lösung)
    • falls du es doch in C++ machen willst, musst du dir cling anschauen. Damit geht das. Aber ich wette, dass das für dich nicht die richtige Lösung ist.

    Außerdem: wo ist die Grenze des Erlaubten? Was ist, wenn jemand statt a = b; ein Kommando zum Formatieren der Festplatte eingibt (oder zum Löschen einer Datei)?

    Falls es nur um Formeln geht, hilft dir vielleicht https://stackoverflow.com/questions/11703082/parsing-math-expression-in-c weiter.



  • ok danke



  • @Rarrocks
    Wenn du so etwas suchst wie z.B. "eval" in PHP oder JavaScript: nein, sowas gibt's in C++ nicht.

    Was es gibt ist z.B. AngelScript. Das soll angeblich ziemlich ähnlich zu C++ sein, und damit kann man angeblich dynamische Strings zur Laufzeit kompilieren und dann ausführen lassen. Ich hab allerdings null Erfahrung mit AngelScript, mehr als was ich so gehört/gelesen habe kann ich dazu also nicht sagen.

    Was natürlich auch noch geht: du kannst dir eine eigene Syntax definieren und dann einen Interpreter dafür bauen. Das ist allerdings richtig richtig viel Arbeit.

    Und dann gibt's noch ein paar C Libraries die man relativ einfach in C++ einbinden kann, die einen fertigen Interpreter für eine Scriptsprache beinhalten. Eine der bekanntesten dürfte wohl libtcl sein.


    Bei den letzten beiden Möglichkeiten musst du allerdings auf jeden Fall alle Variablen auf die das Skript Zugriff haben soll dem Interpreter explizit bekannt machen. Also nur einfach int x = 3; hinschreiben reicht da nicht.

    Wie das bei AngelScript aussieht weiss ich nicht. Könnte sein dass das dort einfach so geht.


Anmelden zum Antworten