Frage

In Bezug auf die akzeptierte Lösung in: SO: expression_evaluator

Kann mir jemand eine Version zur Verfügung stellen, die auch mit Verneinung funktioniert? Dinge wie

((!(0 or !1) and !((0 or 1 or 1) and !1))

muß als gut funktionieren.

Ich habe es funktioniert, so dass negiert die 0en oder 1en ist in Ordnung, aber ich kann es nicht mit der Negation von ganzen Gruppen zu arbeiten (! 'S am Anfang der Klammern)

Ich habe versucht, zu negieren tmp, nachdem sie von eval in der Rückkehr * expr == '(' Block .. if! Vor dem Aufruf es gesehen worden war, aber das hat nicht funktioniert.

War es hilfreich?

Lösung

Der Code in dieser Antwort ist ein wenig ad-hoc. Parsing ist ein gut verstanden Feld, gibt es keine Notwendigkeit für Erfindung. Einer der anderen Antworten dort empfiehlt, unter rekursiven Abstiegs-Parsing. Ich zweite die Empfehlung.

Andere Tipps

Der Algorithmus beschrieben hier mit unäre Operatoren umgehen kann (Betreiber einen Operanden) sowie Funktionen.

Ich habe einmal als Grundlage für einen kompletten C Ausdrucksauswerter mit Unterstützung für symbolische Variablen für eine Befehlszeilenkonsole auf einem Embedded-System. Ich habe nicht den beigefügten Beispielcode verwenden, sondern schrieb es von Grund auf meine Zwecke.

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