module Dfsa:sig
..end
typesimbolo =
char
simbolo
representa o tipo das letras (o alfabeto -
presentes nas fitas mas também nas transições). Aqui fixamos o tipo
char como sendo o alfabeto usado nestes autómatos.typefita =
simbolo list
typeestado =
int
n
estados então estes são 0 1 2 3 .. n-1
.typetransicao =
(estado * simbolo) * estado
q1 --a--> q2
são representadas como ((q1,a),q2)
ao
detrimento da representação mais natural (q1,a,q2)
.
Esta pequena nuance permite uma pesquisa melhorada de uma transição
no conjunto das possíveis transições (de tipo hash table, em que a chave é
(q1,a)
e o conteudo é estado destino q2
)
typemaquina =
transicao list * estado * estado list
typememoria =
estado * fita
exception FIM of memoria
val next : simbolo -> estado -> maquina -> estado
next
calcula o próximo estado, ou seja o estado q
destino da
transição esta---simb--->q
, se esta transição existir. Senão
(i.e. a excepção Not_found
foi lançada) esta situação configura
o fim da execução (situação processada pela função step).val step : memoria -> maquina -> memoria
step
realiza um passo de execução do autómato maq
a partir da
configuração memo
.val is_accepted : memoria -> maquina -> bool
is_accepted
é um predicado que detecta se uma configuração
memo
da execução do autómato maq
prefigura a aceitação. Ou seja o
buffer de entrada encontra-se vazio e há pelo menos um estado final na
configuraçãoval em_par : 'a -> 'b -> 'c -> ('a * 'b) * 'c
val char_of_string : string -> char
val leitura : unit -> fita * maquina
val print_output : memoria -> maquina -> unit
print_output
analisa a configuração final e imprime na
saída standard o veredicto.val main : unit -> unit