c expressão avaliador 2 tomada
-
08-07-2019 - |
Pergunta
Em referência à solução aceite em: SO: expression_evaluator
Alguém pode fornecer uma versão que funciona com negação também? coisas como
((!(0 or !1) and !((0 or 1 or 1) and !1))
necessidade de trabalho também.
Eu tenho que trabalhar para que negando o 0 ou 1 de é bom, mas eu não posso obtê-lo para trabalhar com a negação de grupos inteiros (! 'S no início do parêntese)
Eu tentei negar tmp depois de voltar de eval no * expr == '(' block .. se! Tinha sido visto antes de chamar-lo, mas isso não funcionou.
Solução
O código em que a resposta é um pouco ad-hoc. De análise é um campo bem entendido, não há necessidade para a invenção. Uma das outras respostas não recomenda que olham em análise descendente recursiva. Eu segundo essa recomendação.
Outras dicas
O algoritmo descrito aqui pode lidar com operadores unários (operadores ter um operando) , bem como funções.
Uma vez eu usei como base para um avaliador completa expressão C com suporte para variáveis ??simbólicas para um console de linha de comando em um sistema embarcado. Eu não utilizar o código de exemplo que acompanha, mas escreveu a partir do zero para atender os meus propósitos.