c valutatore di espressioni prende 2
-
08-07-2019 - |
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.
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.