Macchina URM


from pyscript import Element, display import asyncio registri = [] register_count = 1 # Contatore per il numero di registri def add_register(event): global register_count registri = [] for i in range(register_count): inp = Element(f"reg-input-{i}").element.value # Cambiato per ottenere il valore dall'elemento if inp: try: value = int(inp) except ValueError: value = 0 else: value = 0 if value < 0: value = 0 registri.append(value) new_input_div = Element('input-area') new_input="" for c, i in enumerate(registri): if i==0: new_input += f'''
''' else: new_input += f'''
''' c+=1 new_input += f'''
''' new_input_div.element.innerHTML = new_input register_count += 1 async def finish_input(event): Element("interrompi").element.style.display = "block" global registri global fine fine=False registri = [] # Reset registri output = Element("output") # Sezione output output.element.innerHTML = "" # Reset dell'output # Leggi il codice dal textarea di CodeMirror code = Element("code-input").element.value.strip() # Modifica qui per ottenere il valore for i in range(register_count): try: inp = Element(f"reg-input-{i}").element.value # Cambiato per ottenere il valore dall'elemento if inp: value = int(inp) else: value = 0 if value < 0: output.element.innerHTML += "è stato inserito un valore negativo
" else: registri.append(value) output.element.innerHTML += f"Registro {i}: {value}
" except ValueError: output.element.innerHTML += "è stato inserito un valore non valido
" def get(index): if index<0: raise ValueError("maggiore o uguale a 0") while len(registri) <= index: registri.append(0) return registri[index] def increment(index): if index<0: raise ValueError("maggiore o uguale a 0") while len(registri) <= index: registri.append(0) registri[index]+=1 def set(index, value): if index<0: raise ValueError("maggiore o uguale a 0") while len(registri) <= index: registri.append(0) registri[index]=value # Esecuzione del codice code = code.upper() code = code.replace(" ", "").replace("\t","").replace(" ","") righe = code.split("\n") if code=="": output.element.innerHTML += "Non è stato inserito nessun codice
" else: output.element.innerHTML += "Esecuzione:
" pc = 0 c=0 while pc < len(righe): if fine: output.element.innerHTML += "Programma interroto.
" break await asyncio.sleep(0) if c>10000: output.element.innerHTML += "Sono state eseguite più di 10000 istruzioni, il programma è stato interroto.
" break else: if ":" in righe[pc]: righe[pc]=righe[pc].split(":")[1] output.element.innerHTML += "riga " + str(pc + 1) + ": " + righe[pc] try: bl=False if righe[pc][0] == "#": pass elif righe[pc][0]=="S": increment(int(righe[pc][2:-1])) bl=True elif righe[pc][0]=="Z": set(int(righe[pc][2:-1]), 0) bl=True elif righe[pc][0]=="T": x=righe[pc][2:-1].split(",") set(int(x[1]), get(int(x[0]))) bl=True elif righe[pc][0]=="J": x=righe[pc][2:-1].split(",") if get(int(x[0]))==get(int(x[1])): pc=int(x[2])-2 if pc<-1: output.element.innerHTML += ", Istruzione non riconosciuta
Programma interrotto
" break else: output.element.innerHTML += ", Istruzione non riconosciuta
Programma interrotto
" break if Element("vehicle1").element.checked and bl: output.element.innerHTML += " Registri: "+str(registri) except: output.element.innerHTML += ", Istruzione non riconosciuta
Programma interrotto
" break pc += 1 c+=1 output.element.innerHTML += "
" Element("interrompi").element.style.display = "none" output.element.innerHTML += "Fine
Numero istruzioni eseguite: "+str(c)+"
Registri: " + str(registri) def interrompi(event): global fine fine=True Element("interrompi").element.style.display = "none" Element("add-reg-btn").element.onclick = add_register Element("finish-input-btn").element.onclick = finish_input Element("interrompi").element.onclick = interrompi
Created by Rotolone Gabriele