Pessoal,
Achei alguns tópicos sobre validação de expressões aritméticas no guj, todos praticamente dão a mesma solução para validar expressões matemáticas, que é o seguinte:
Empilho ou insiro todo caracter que abre a expressão(EX:’(’,’[’,’{’). Quando achar um caracter que fecha a expressão verifico se se corresponde ao topo da pilha, se corresponde desempilho, se chegar ao final com a pilha vazia a expressão está correta. Mas no caso da expressão abaixo, como ficaria:
(Z+Y) * C+ [(B+D)]- A expressão está correta, mas se eu usar o caso acima não fecha, explico o pq:
empilho: ‘(’,’[’,’(’ sendo este último o topo da pilha.
desempilho e confiro: ‘)’(o primeiro confere com o top, então removo), agora fico com top igual ‘[’ e o próximo lido de fechamento é ‘)’, ou seja, não fecha se eu não desempilhar fico com elementos e teoricamente a expressão está incorreta, mas está correta… Se partir para o próximo de fechamento, que seria o último ‘]’ fecha com o top não removido, mas ainda fico com um ‘(’ não removido. Como posso resolver isso? Obrigado!!