Manuale d'uso del programma Automi
Simulatore di automi:
Il simulatore legge un file che descrive un automa e costruisce un'interfaccia grafica
per l'automa, che consente di provarlo e verificarne la correttezza.
Il simulatore riconosce automi di mealy e di moore.
Per quanto riguarda il funzionamento, ci sono tre possibilità:
- Automa regolare:
- per ogni ingresso viene indicata una serie di bottoni di scelta (radio button) con i valori leciti,
ad ogni pressione del tasto 'Passo' vengono valutati i valori degli ingressi e vengono
aggiornati lo stato e le uscite, oppure premendo il pulsante 'Avvia' lo stato e le uscite
vengono aggiornati una volta al secondo.
- Automa immediato:
- se l'automa ha un solo ingresso, si può scegliere la modalità immediata. In questa
modalità al posto dei bottoni di scelta verranno usati dei bottoni normali e non
si avranno il bottone 'Passo' ne il bottone 'Avanza'. Ogni volta che si premerà
il bottone relativo ad un valore dell'ingresso, l'automa avanzerà nello stato,
aggiornando l'uscita
- Automa riconoscitore:
- in questo caso invece degli ingressi indicheremo un alfabeto. L'ingresso sarà dato
dal carattere corrente di una stringa di ingresso, che potremo immettere. L'avanzamento
si otterrà coi i bottoni 'Passo' o 'Avanza'.
LINGUAGGIO DI DEFINIZIONE DELL'AUTOMA
Prima di tutto alcune precisazioni:
-
Il sistema accetta solo caratteri ASCII standard, dallo spazio (codice 32) alla ~ (codice 126)
- Non viene fatta differenza tra lettere maiuscole e minuscole
- Un <simbolo>, che corrisponde ad un nome o ad una parola chiave, è una sequenza di caratteri
dallo spazio escluso, al ~ incluso. Un simbolo termina con il primo separatore
- Un separatore è una sequenza di uno o più caratteri scelti tra
- qualunque carattere di controllo ASCII (es TAB, A Capo)
- lo spazio
- la visgola (,)
- il punto e virgola (;)
- Una <stringa> è una qualunque sequenza di caratteri racchiusa tra " (doppi apici)
Per definire l'automa si usa il seguente linguaggio:
<programma> ::= <autore> <automa>
<autore> ::= autore { <stringa> }
<stringa> (come definita più sopra)
<automa> ::= <mealy> | <moore>
<mealy> ::= mealy { <ingressi> [immediato] <uscite> <stati> <tab-transizione> <tab-trasformazione-mealy> }
<moore> ::= moore { <ingressi> <uscite> <stati> <tab-transizione> <tab-trasformazione-moore> }
<ingressi> ::= input { <ingresso> ... } | alfabeto { <stringa> }
<ingresso> ::= <simbolo> { <simbolo> <simbolo> ... }
<uscite> ::= output { <uscita> ... }
<uscita> ::= <simbolo> { <val-uscita> <val-uscita> ... }
<val-uscita> ::= <simbolo> | { <simbolo> <stringa> }
<stati> ::= stati { <simbolo> <simbolo> ... }
<simbolo> (come definito più sopra)
<tab-transizione> ::= transizione { <riga-transizione> ... }
<riga-transizione> ::= { <simbolo> ... }
<tab-trasformazione-mealy> ::= trasformazione { <riga-trasformazione-mealy> ... }
<riga-trasformazione-mealy> := { <valori-uscita> ... }
<valori-uscita> ::= { <simbolo> ... }
<tab-trasformazione-moore> ::= trasformazione { <valori-uscita> ... }
Note:
- gli oggetti tra < e > sono elementi della definizione, descritti più avanti
- L'ordine delle sezioni non è importante, basta che quando servono degli oggetti siano stati
già definiti
- Altrettanto, autore può precedere o seguire l'automa
- Al fine di determinare l'ordine delle colonne della tabella di transizione, gli ingressi sono ordinati.
L'indice delle colonne può essere visto come un conteggio nel quale il primo ingresso ha il peso maggiore.
- All'interno di un singolo ingresso i valori sono ordinati dal primo, che ha valore 0, all'ultimo
- Per le colonne, quindi, la prima corrisponde al primo valore per tutti gli ingressi, la seconda al secondo
valore per l'ultimo ingresso (quello con peso minore), al primo per gli altri, la terza al terzo valore per
l'ultimo ingresso, al primo per tutti gli altri ecc.
- Le righe delle tabelle di transizione e di uscita, devono avere lo stesso ordine degli stati, come sono
stati elencati nella definizione.
- Nella tabella di trasformazione, all'interno di un singolo gruppo di valori d'uscita, i valori delle uscite vanno
indicati nello stesso ordine in cui si sono definite le uscite
- Se tra i valori di un'uscita se ne è indicato qualcuno con una stringa associata, allora per quell'uscita
verranno visualizzate sempre le sringhe associate, quindi avremo il campo vuoto se per un valore non è
associata alcuna stringa. Se invece non è asociata una stringa ad alcun valore, allora verranno sempre
visualizzati i nomi dei valori di uscita.
Prof. Stefano Salvi