Com as duas ultimas postagens
discutindo uma metodologia para o calculo de expressão pós-fixa, amplia-se o
senso de continuidade no assunto com o reaproveitamento do material elaborado,
tornando o estudo atual em um caso de transformar uma expressão infixa em
pós-fixa.
Um ponto importante a ser
implementado nesta conversão é a prioridade do operador em uma expressão infixa
e como o parêntese altera em qual ordem a operação irá ser executado.
O tratamento da precedência deverá
seguir a tabela apresentado anteriormente e incluir parênteses no tratamento,
considere uma função prcd(opr1, opr2) cujo resultado determina a ação a ser tomada, aonde
opr1 e opr2
são operadores na expressão, sempre que a precedência de opr1 for maior ou igual que opr2, retorna VERDADE, do contrario
sendo menor, retorna FALSO, no exemplo abaixo temos a seguinte situação:
INFIXA
|
PÓS-FIXA
|
X + Y * Z
|
X Y Z * +
|
( X + Y ) * Z
|
X Y + Z *
|
Em ambos
os casos, a ordem dos operando se manteve, uma decisão deve ser feita quando
surgir um operador, guarda-se o mesmo em
uma pilha e continua-se montando a
pós-fixa, no próximo operador a ser encontrado, este será comparado com o valor
armazenado para definir a precedência da operação, para o controle de
armazenamento dos dados será utilizada a pilha, que será esvaziada quando o símbolo
de maior precedência for encontrado.
|
No
tratamento de parênteses a regra a ser incluída consiste em armazenar o parêntese
esquerdo na pilha até encontrar um parêntese direito, retirar os operadores da
pilha até encontrar o parêntese esquerdo armazenado.
|
||||||||||||||||||||||||||||||||||||||||
Caso o processo de conversão do
algoritmo lhe pareça confuso, repare que o método de conversão trabalha de
dentro para fora, sempre selecionando o conteúdo dos parênteses primeiro,
semelhante maneira que seria dada a resposta em formato manual, ao invés de
usar lápis e papel para lembrar a ordem dos operadores, utilizamos a pilha para
armazenar o operador de menor prioridade.
Todo o código em linguagem C para avaliar uma expressão infixa utilizando pilhas está incluído na próxima postagem "Rotinas para infixa" que completa o tema sobre analise de expressões.
Todo o código em linguagem C para avaliar uma expressão infixa utilizando pilhas está incluído na próxima postagem "Rotinas para infixa" que completa o tema sobre analise de expressões.