[EP9] Como tratar o menos unário

Re: [EP9] Como tratar o menos unário

by José Coelho de Pina -
Number of replies: 0

mas não entendi a implementação em código.

Quando a precedência é da direira par a esquerda, quando há empate na precedência entre o operador sendo examinado e o operador no topo da pilha, o operador do topo da pilha deve permancer na pilha e o novo operador será empilhado. Com isso garantimos que na expressão posfixa esses operadores apareçam no ordem inversa àquela que foram examinados.

>>> 
>>> tokens = tokeniza("2^3^4^5")
>>> imprima_tokens(tokens)
[N(2), O('^'), N(3), O('^'), N(4), O('^'), N(5)]
>>> posfixa = infixa_para_posfixa(tokens)
-----
token a ser examinado =  N(2)
posfixa =[]
pilha   = []
-----
token a ser examinado =  O('^')
posfixa =[N(2)]
pilha   = []
-----
token a ser examinado =  N(3)
posfixa =[N(2)]
pilha   = [O('^')]
-----
token a ser examinado =  O('^')
posfixa =[N(2), N(3)]
pilha   = [O('^')]
-----
token a ser examinado =  N(4)
posfixa =[N(2), N(3)]
pilha   = [O('^'), O('^')]
-----
token a ser examinado =  O('^')
posfixa =[N(2), N(3), N(4)]
pilha   = [O('^'), O('^')]
-----
token a ser examinado =  N(5)
posfixa =[N(2), N(3), N(4)]
pilha   = [O('^'), O('^'), O('^')]
-----
desempilhando tokens... 
posfixa =[N(2), N(3), N(4), N(5)]
pilha   = [O('^'), O('^'), O('^')]
-----
desempilhando tokens... 
posfixa =[N(2), N(3), N(4), N(5), O('^')]
pilha   = [O('^'), O('^')]
-----
desempilhando tokens... 
posfixa =[N(2), N(3), N(4), N(5), O('^'), O('^')]
pilha   = [O('^')]
-----
posfixa =[N(2), N(3), N(4), N(5), O('^'), O('^'), O('^')]
pilha   = []
>>> 
>>> tokens = tokeniza("2+3+4+5")
>>> imprima_tokens(tokens)
[N(2), O('+'), N(3), O('+'), N(4), O('+'), N(5)]
>>> posfixa = infixa_para_posfixa(tokens)
-----
token a ser examinado =  N(2)
posfixa =[]
pilha   = []
-----
token a ser examinado =  O('+')
posfixa =[N(2)]
pilha   = []
-----
token a ser examinado =  N(3)
posfixa =[N(2)]
pilha   = [O('+')]
-----
token a ser examinado =  O('+')
posfixa =[N(2), N(3)]
pilha   = [O('+')]
-----
token a ser examinado =  N(4)
posfixa =[N(2), N(3), O('+')]
pilha   = [O('+')]
-----
token a ser examinado =  O('+')
posfixa =[N(2), N(3), O('+'), N(4)]
pilha   = [O('+')]
-----
token a ser examinado =  N(5)
posfixa =[N(2), N(3), O('+'), N(4), O('+')]
pilha   = [O('+')]
-----
desempilhando tokens... 
posfixa =[N(2), N(3), O('+'), N(4), O('+'), N(5)]
pilha   = [O('+')]
-----
posfixa =[N(2), N(3), O('+'), N(4), O('+'), N(5), O('+')]
pilha   = []
>>>