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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top