def esta_balanceada(expressao): """ Função que calcula se expressão possui parenteses, colchetes e chaves balanceados O Aluno deverá informar a complexidade de tempo e espaço da função Deverá ser usada como estrutura de dados apenas a pilha feita na aula anterior :param expressao: string com expressao a ser balanceada :return: boleano verdadeiro se expressao está balanceada e falso caso contrário """ #Análise de Complexidade #Tempo e memória são O(n) pilha = Pilha() if expressao == "": return True elif expressao[0] in ')}]': return False else: for caracter in expressao: if caracter in '({[': pilha.empilhar(caracter) else: try: desenpilhado = pilha.desempilhar() except PilhaVaziaErro: return pilha.vazia() if caracter == '}' and desenpilhado != '{': return False elif caracter == ']' and desenpilhado != '[': return False elif caracter == ')' and desenpilhado != '(': return False return pilha.vazia()
def analise_lexica(expressao): def caracteres(param1): return param1 in "(){.}[]+-*/" fila=Fila() count=0 pilha=Pilha() while count!=len(expressao): if not(caracteres(expressao[count]) or num(expressao[count])): raise ErroLexico else: if caracteres(expressao[count]): if not pilha.vazia(): fila.enfileirar(pilha.desempilhar()) fila.enfileirar(expressao[count]) if num(expressao[count]): if pilha.vazia(): pilha.empilhar(expressao[count]) else: final=pilha.desempilhar() pilha.empilhar(final+expressao[count]) count+=1 if not pilha.vazia(): fila.enfileirar(pilha.desempilhar()) return fila
def esta_balanceada(expressao): pilha = Pilha() abrir = "{[(" fechar = "}])" if expressao and expressao[0] in fechar: return False for x in expressao: if x in abrir: pilha.empilhar(x) # print (x) elif x in fechar: if ( x == "}" and pilha.desempilhar() != "{" or x == ")" and pilha.desempilhar() != "(" or x == "]" and pilha.desempilhar() != "[" ): return False if pilha.vazia(): return True