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()
예제 #2
0
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