Domanda

In riferimento alla soluzione accettata in: SO: expression_evaluator

Qualcuno può fornire anche una versione che funziona con negazione? cose come

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

deve funzionare anche.

L'ho fatto funzionare in modo che negare gli 0 o gli 1 vada bene ma non riesco a farlo funzionare con la negazione di interi gruppi (! è all'inizio della parentesi)

Ho provato a negare tmp dopo essere tornato da eval nel blocco * expr == '(' '.. se! era stato visto prima di chiamarlo, ma non ha funzionato.

È stato utile?

Soluzione

Il codice in quella risposta è un po 'ad-hoc. L'analisi è un campo ben compreso, non c'è bisogno di invenzioni. Una delle altre risposte lì consiglia di esaminare l'analisi della discesa ricorsiva. Secondo la raccomandazione.

Altri suggerimenti

L'algoritmo descritto qui può trattare con operatori unari (operatori con un operando) , così come le funzioni.

Una volta l'ho usato come base per un valutatore di espressioni C completo con supporto per variabili simboliche per una console della riga di comando su un sistema incorporato. Non ho usato il codice di esempio allegato, ma piuttosto l'ho scritto da zero per soddisfare i miei scopi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top