Question

En référence à la solution acceptée dans: SO: expression_evaluator

Quelqu'un peut-il fournir une version qui fonctionne également avec la négation? des choses comme

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

doit également fonctionner.

Je l'ai fait fonctionner pour que la négation des 0 ou des 1 soit correcte, mais je ne parviens pas à la faire fonctionner avec la négation de groupes entiers (le début de la parenthèse!)

J'ai essayé de nier tmp après mon retour d'eval dans * expr == '(' block .. si! avait été vu avant de l'appeler, mais cela n'a pas fonctionné.

Était-ce utile?

La solution

Le code dans cette réponse est un peu ad hoc. L'analyse syntaxique est un domaine bien compris, aucune invention n'est nécessaire. L'une des autres réponses conseille de se pencher sur l'analyse syntaxique par descente récursive. J'appuie cette recommandation.

Autres conseils

L'algorithme décrit ici peut traiter des opérateurs unaires (les opérateurs ayant un seul opérande). , ainsi que des fonctions.

Je l'ai déjà utilisé comme base pour un évaluateur d'expression C complet prenant en charge les variables symboliques pour une console de ligne de commande sur un système intégré. Je n'ai pas utilisé l'exemple de code ci-joint, mais je l'ai écrit de toutes pièces pour répondre à mes besoins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top