Frage

Meine Aufgabe ist es, eine App (unfortunatly auf C), den Ausdruck in Infix-Notation liest zu schreiben (mit Variablen, unäre und binären Operatoren) und im Speicher ablegen, dann bewerten. Außerdem sollten Kontrollen für Richtigkeit durchgeführt werden.

Beispiel:

  

3 * (A + B) - (- 2-78) * 2 + (0 * A)

Nachdem ich alle Werte bekam, Programm sollte es berechnet wird.

Die Frage ist: Was ist der beste Weg, um dies? (Mit Optimierung und Validierung)

zu tun

Welche Schreibweise Wahl als Basis des Baumes?

Soll ich darstellen Ausdruck als Baum? Wenn ja kann ich es leicht optimieren (nur Knoten fallen, die 0 zurück oder smth sonst).

Cheers,

War es hilfreich?

Lösung

Der Link im Kommentar von Greg Hewgill oben vorgeschlagen enthält alle Informationen, die Sie benötigen:

Wenn Sie darauf bestehen, auf eigene Faust zu schreiben,

  • Rekursiver Abstieg wahrscheinlich der einfachste Weg ist es mit der Hand zu tun.
  • Sonst könnte man ein Tool wie Bison verwenden (da Sie in C arbeiten). Dieses Tutorial ist das beste, das ich für die Arbeit mit Flex und Bison (oder Lex gesehen / Yacc)

Sie können auch die Suche nach "Ausdrucksauswerter" auf Codeproject - sie haben eine Menge Artikel zum Thema

.

Ich kam über die vor einiger Zeit Ausdrucksauswerter des M4-Programm. Sie können ihren Code zu sehen untersuchen, wie es funktioniert. Ich denke, Link auf Google Codesearch ist die Version, die ich sah.

Andere Tipps

Ihre Frage Hinweise auf Anforderungen an Ihrer Lösung gebracht werden:

  

unfortunatly auf C

so hier einige Vorschläge möglicherweise nicht zulässig. Ich würde Dennoch deuten darauf hin, dass dies ein sehr kompliziertes Problem zu lösen, und dass Sie wäre viel besser versuchen, eine geeignete vorhandene Bibliothek zu finden, die Sie in Ihren C-Code in Verbindung bringen könnten dies für Sie tun . Dies würde die Zeit und Mühe wahrscheinlich reduziert erforderlich, um den Code zum Laufen zu bringen, und reduziert den laufenden Wartungsaufwand. Natürlich würden Sie über die Lizenzierung denken, aber ich wäre überrascht, wenn es nicht eine gute Analyse / Auswertung Bibliothek „da draußen“ war, die eine gute Arbeit bei der dies tun könnte.

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