Spaces:
Build error
Build error
| import streamlit as st | |
| class Estado: | |
| def __init__(self, nome): | |
| self.nome = nome | |
| self.transicoes = {} | |
| def adicionar_transicao(self, simbolo, proximo_estado, empilhar=None, desempilhar=None): | |
| self.transicoes[simbolo] = (proximo_estado, empilhar, desempilhar) | |
| class AutomatoPilha: | |
| def __init__(self): | |
| self.estados = {} | |
| self.estado_atual = None | |
| self.pilha = [] | |
| def adicionar_estado(self, estado): | |
| self.estados[estado.nome] = estado | |
| def definir_estado_inicial(self, estado_inicial): | |
| self.estado_atual = estado_inicial | |
| def processar_entrada(self, entrada): | |
| self.pilha = ['$'] | |
| print(f"Pilha inicial: {self.pilha}") | |
| for simbolo in entrada: | |
| if simbolo in self.estado_atual.transicoes: | |
| proximo_estado, empilhar, desempilhar = self.estado_atual.transicoes[simbolo] | |
| if desempilhar: | |
| if self.pilha[-1] == desempilhar: | |
| self.pilha.pop() | |
| else: | |
| print("Erro: Desempilhamento inválido") | |
| return False | |
| if empilhar: | |
| self.pilha.append(empilhar) | |
| self.estado_atual = self.estados[proximo_estado] | |
| print(f"Símbolo: {simbolo}, Estado: {self.estado_atual.nome}, Pilha: {self.pilha}") | |
| elif self.estado_atual.nome == 'q2' and simbolo != '"': # Qualquer char em q2 | |
| self.estado_atual = self.estados['q2'] | |
| print(f"Símbolo: {simbolo}, Estado: {self.estado_atual.nome}, Pilha: {self.pilha}") | |
| elif self.estado_atual.nome == 'q3' and ('0' <= simbolo <= '9' or simbolo == '-' or simbolo == ' ' or simbolo == 'e' or simbolo == 'E'): | |
| self.estado_atual = self.estados['q3'] | |
| print(f"Símbolo: {simbolo}, Estado: {self.estado_atual.nome}, Pilha: {self.pilha}") | |
| elif self.estado_atual.nome == 'q1' and simbolo == ' ': # Ignora espaços em q1 | |
| print(f"Símbolo: {simbolo}, Estado: {self.estado_atual.nome}, Pilha: {self.pilha}") | |
| elif self.estado_atual.nome == 'q3' and simbolo == '[': # novo array | |
| self.estado_atual = self.estados['q1'] | |
| self.pilha.append('[') | |
| print(f"Símbolo: {simbolo}, Estado: {self.estado_atual.nome}, Pilha: {self.pilha}") | |
| elif self.estado_atual.nome == 'q1' and simbolo == ']': # fecha array | |
| self.estado_atual = self.estados['q3'] | |
| if(self.pilha[-1] == "["): | |
| self.pilha.pop() | |
| print(f"Símbolo: {simbolo}, Estado: {self.estado_atual.nome}, Pilha: {self.pilha}") | |
| elif self.estado_atual.nome == 'q3' and simbolo == ',': | |
| self.estado_atual = self.estados['q1'] | |
| print(f"Símbolo: {simbolo}, Estado: {self.estado_atual.nome}, Pilha: {self.pilha}") | |
| elif self.estado_atual.nome == "q1" and ('0' <= simbolo <= '9' or simbolo == '-' or simbolo == '.' or simbolo == 'e' or simbolo == 'E'): | |
| self.estado_atual = self.estados["q3"] | |
| print(f"Símbolo: {simbolo}, Estado: {self.estado_atual.nome}, Pilha: {self.pilha}") | |
| elif self.estado_atual.nome == "q1" and simbolo == "[": | |
| self.estado_atual = self.estados["q1"] | |
| self.pilha.append("[") | |
| print(f"Símbolo: {simbolo}, Estado: {self.estado_atual.nome}, Pilha: {self.pilha}") | |
| elif self.estado_atual.nome == "q1" and simbolo == "{": | |
| self.estado_atual = self.estados["q1"] | |
| self.pilha.append("{") | |
| print(f"Símbolo: {simbolo}, Estado: {self.estado_atual.nome}, Pilha: {self.pilha}") | |
| elif self.estado_atual.nome == "q1" and simbolo == "}": | |
| self.estado_atual = self.estados["q3"] | |
| if(self.pilha[-1] == "{"): | |
| self.pilha.pop() | |
| print(f"Símbolo: {simbolo}, Estado: {self.estado_atual.nome}, Pilha: {self.pilha}") | |
| elif self.estado_atual.nome == "q5" and simbolo == ",": | |
| self.estado_atual = self.estados["q1"] | |
| print(f"Símbolo: {simbolo}, Estado: {self.estado_atual.nome}, Pilha: {self.pilha}") | |
| elif self.estado_atual.nome == "q5" and simbolo == "]": | |
| self.estado_atual = self.estados["q3"] | |
| if(self.pilha[-1] == "["): | |
| self.pilha.pop() | |
| print(f"Símbolo: {simbolo}, Estado: {self.estado_atual.nome}, Pilha: {self.pilha}") | |
| elif self.estado_atual.nome == "q1" and simbolo == ",": | |
| self.estado_atual = self.estados["q5"] | |
| print(f"Símbolo: {simbolo}, Estado: {self.estado_atual.nome}, Pilha: {self.pilha}") | |
| elif self.estado_atual.nome == "q4" and simbolo == ']': # fecha array em q4 | |
| self.estado_atual = self.estados['q3'] | |
| if(self.pilha[-1] == "["): | |
| self.pilha.pop() | |
| print(f"Símbolo: {simbolo}, Estado: {self.estado_atual.nome}, Pilha: {self.pilha}") | |
| elif self.estado_atual.nome == 'q4' and simbolo == '}': # Nova transição adicionada! | |
| self.estado_atual = self.estados['q4'] # Permanece em q4 (ou pode ir para outro estado final) | |
| if self.pilha[-1] == '{': | |
| self.pilha.pop() | |
| print(f"Símbolo: {simbolo}, Estado: {self.estado_atual.nome}, Pilha: {self.pilha}") | |
| else: | |
| print(f"Erro: Transição inválida para o símbolo '{simbolo}' no estado '{self.estado_atual.nome}'") | |
| return False | |
| if self.estado_atual.nome == 'q4' and self.pilha == ['$']: | |
| return True | |
| else: | |
| return False | |
| q0 = Estado('q0') | |
| q1 = Estado('q1') | |
| q2 = Estado('q2') | |
| q3 = Estado('q3') | |
| q4 = Estado('q4') | |
| q5 = Estado('q5') | |
| q0.adicionar_transicao('{', 'q1', empilhar='{') | |
| q1.adicionar_transicao('"', 'q2', empilhar='"') | |
| q2.adicionar_transicao('"', 'q3', desempilhar='"') | |
| q3.adicionar_transicao(':', 'q3') | |
| q3.adicionar_transicao('{', 'q1', empilhar='{') | |
| q3.adicionar_transicao('"', 'q2', empilhar='"') | |
| q3.adicionar_transicao('}', 'q4', desempilhar='{') | |
| q3.adicionar_transicao(']', 'q4', desempilhar='[') # Transição adicionada na resposta anterior (CORRETA) | |
| q3.adicionar_transicao(',', 'q1') | |
| q1.adicionar_transicao(']', 'q3', desempilhar='[') | |
| q3.adicionar_transicao('[', 'q1', empilhar='[') | |
| q1.adicionar_transicao(',', 'q5') | |
| q5.adicionar_transicao(',', 'q1') | |
| q5.adicionar_transicao(']', 'q3', desempilhar='[') | |
| q4.adicionar_transicao(']', 'q3', desempilhar='[') | |
| q4.adicionar_transicao('}', 'q4', desempilhar='{') # Nova transição adicionada agora! | |
| json_input = st.text_input('Insira seu JSON:') | |
| if st.button("Send"): | |
| automato = AutomatoPilha() | |
| automato = AutomatoPilha() | |
| automato.adicionar_estado(q0) | |
| automato.adicionar_estado(q1) | |
| automato.adicionar_estado(q2) | |
| automato.adicionar_estado(q3) | |
| automato.adicionar_estado(q4) | |
| automato.adicionar_estado(q5) | |
| automato.definir_estado_inicial(q0) | |
| if automato.processar_entrada(json_input): | |
| st.write("JSON válido!") | |
| else: | |
| st.write("JSON inválido!") |