2016-05-31 2 views
0

Ich erstelle einen Online-Rechner, mit dem Benutzer mathematische Operationen ausführen können. Im Kern verwende ich math.js Evaluator, um die Ergebnisse der Operationen zu erhalten.Benutzerdefinierte Steueranweisungen mit math.js und Codeauswertung

Derzeit kann der Benutzer Operationen in der Befehlszeile einzeln eingeben, aber der nächste Schritt meiner Idee sollte dem Benutzer erlauben, einige Zeilen Javascript (oder benutzerdefinierte Syntax) in ein Textfeld oder einen anderen Editor zu schreiben und dann die gesamte Eingabe auszuwerten. Das Problem ist, dass math.js eval nicht damit umgehen kann, aber es erlaubt, die eingebaute Funktionalität um benutzerdefinierte Funktionen zu erweitern.

Gibt es eine Möglichkeit, die Bibliothek für die Behandlung von/if/switch-Anweisungen zu erweitern? Oder sollte ich vielleicht über einen anderen Ansatz nachdenken (analysiere jede Zeile und überprüfe den Namen einer bestimmten Aussage? Was soll ich mit Klammern tun?).

Hat jemand ähnliches Problem durchgesetzt? Irgendwelche Vorschläge, wie ich mit diesem Problem umgehen kann?

+0

Was würden Sie der Benutzer wollen mit dem JavaScript-Code zu tun? Es ist nicht so, als wäre js ein mathematischer Ausdruck, der einen einzelnen Wert ergibt. – Bergi

+0

Können Sie uns eine Benutzereingabe zeigen, die Sie auswerten möchten, und das erwartete Ergebnis? –

+0

@Bergi und @le_m, lassen Sie uns sagen, Benutzer möchte den Fluss des Skripts steuern, die er schrieb, wie in Matlab, wo Sie benutzerdefinierte Funktion definieren können, innerhalb wo Sie zum Beispiel eingeben können 'für i = 1: 6 c [i ] = a [i] * b [i] end' und ähnlich .. Ich wollte Benutzern erlauben, ganze Algorithmen auszufüllen und sie als Funktionen zu verwenden, die von der Befehlszeile next – Kamil

Antwort

0

Gibt es eine Möglichkeit, die Bibliothek für die Behandlung von/if/switch-Anweisungen zu erweitern?

Nein, das wird nicht unterstützt. Es ist auf die Wunschliste obwohl finden Sie unter:

https://github.com/josdejong/mathjs/issues/467

+0

Ja, das habe ich gestern überprüft, danke. Ich habe jedoch über eine Lösung nachgedacht, um ganzen Eingabecode Zeile für Zeile zu analysieren und Anweisungen für/if/switch zu erkennen, und diese Zeilen sollten übersprungen werden, andernfalls sollten Zeilen mit math.eval umschlossen werden, vielleicht sollte das den Trick machen. – Kamil

+0

Es muss nicht unbedingt mit der mathjs-Bibliothek verbunden sein, es kann ein Wrapper sein, der den richtigen Code generiert – Kamil

Verwandte Themen