Frage

Ich schreibe eine Excel-wie C ++ Konsolenanwendung für die Hausaufgaben. Meine app soll in der Lage sein, Formeln zu akzeptieren, für seine Zellen, zum Beispiel so etwas wie dies bewerten soll:

Sum(tablename\fieldname[recordnumber], fieldname[recordnumber], ...)

tablename\fieldname[recordnumber] points to a cell in another table, 
fieldname[recordnumber] points to a cell in current table

oder

Sin(fieldname[recordnumber])

oder

anotherfieldname[recordnumber]

oder

"10" // (simply a number)

so ähnlich. Funktionen sind Sum, Ave, Sin, Cos, Tan, Kinderbett, Mul, Div, Pow, Log (10), Ln, Mod

Es ist erbärmlich, ich weiß, aber es ist meine Hausaufgaben: '(

So weiß jemand einen Trick, so etwas zu bewerten?

War es hilfreich?

Lösung

Ok, nette Hausaufgaben Frage nach dem Weg.

Es hängt wirklich davon ab, wie schwer Sie wollen, dies zu sein. Sie können einen vollständigen Ausdruck Parser erstellen (die Spaß macht, sondern auch zeitaufwendig).

Um das zu tun, müssen Sie die vollständige Grammatik beschreiben und ein Frontend (hat einen Blick auf lex und yacc oder flexx und Bison schreiben.

Aber wie ich Ihre Frage sehen kann man sich auf drei Unterfälle beschränken:

  • ein einfacher Wert
  • ein Lookup (möglicherweise zu einer anderen Tabelle)
  • eine Funktion, die Eingänge sind Lookups

Ich denke, ein wenig OO-Design können Sie hilft hier.

Ich bin mir nicht sicher, ob Sie mit Echtzeit-Aktualisierung und Kreisabhängigkeitsprüfungen zu tun haben. Sonst können sie zu schwierig sein.

Andere Tipps

Für das Parsen, würde ich bei rekursiven Abstiegs-Parsing aussehen. Dann haben Sie eine Tabelle, die alle möglichen Funktionsnamen abbildet Zeiger funktionieren:

struct FunctionTableEntry {
    string name;
    double (*f)(double);
};

Sie sollten einen Parser schreiben. Parser sollen, um die Expression d.h. jede Zeile und sollen den Befehl identifizieren und den Parsing-Baum zu konstruieren. Dies ist die erste Phase. In der zweiten Phase können Sie den Baum bewerten, indem die Daten für die einzelnen Elemente des Befehls ersetzt wird.

Zurück Responder getroffen haben es auf den Punkt: müssen Sie den Zellinhalt analysieren und interpretieren sie .

Stackoverflow hat bereits eine ganze Reihe von Fragen auf dem Aufbau von Compilern und interperters wo Sie Hinweise zu Ressourcen finden können. Einige von ihnen sind:

und so weiter.

Abgesehen: Ich habe nie die Energie, sie alle miteinander zu verbinden oder sogar versuchen, eine umfassende Liste erstellen

.

Ich denke, man nicht yacc / lex (oder dergleichen) verwenden können, so müssen Sie analysieren „von Hand“:
Iterieren über die Schnur und teilen sie in seine Teile. Was für ein Teil ist, hängt von Ihnen Grammatik (Syntax). Auf diese Weise können Sie die Funktionsnamen und die Parameter finden. Die Schwierigkeit, dies hängt von der Komplexität der Syntax.

Vielleicht sollten Sie ein bisschen lesen über lexikalische Analyse .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top