AF
Class AFabstracto

java.lang.Object
  extended by AF.AFabstracto
Direct Known Subclasses:
AF

public abstract class AFabstracto
extends java.lang.Object

[Super]Clase abstracta para la implementacion interna de un automata finito. Al tratarse de una clase abstracta deberemos trabajar NO con objetos de tipo AFabstracto sino con objetos de tipo AF, ya que es la clase que implementa la superclase abstracta AFabstracto.

La implementacion interna del automata se realiza en base a diferentes atributos que almacenan los estados, alfabeto, estado inicial, etc. del automata. Estos atributos se describen pormenorizadamente mas abajo.

Version:
Revision 1.2.2, 16/03/09
Author:
Jesus Vilares ( jvilares@udc.es), Miguel A. Molinero

Field Summary
protected  java.util.LinkedHashSet alfabeto
          Alfabeto aceptado por el automata.
protected  java.util.LinkedHashSet arcos
          Conjunto de arcos o transiciones del automata.
protected  java.util.LinkedHashSet estados
          Conjunto de estados del automata.
protected  java.util.LinkedHashSet finales
          Conjunto de estados finales del automata.
protected static int i
          Variable auxiliar para la numeracion de los ficheros auxiliares creados para los dibujos de los automatas.
protected  Estado inicial
          Estado inicial del automata.
protected  int MAX_ESTADOS
          Numero maximo de estados admitidos por el automata (1000 estados).
 
Constructor Summary
AFabstracto(java.util.LinkedHashSet qs, java.util.LinkedHashSet ab, Estado i, java.util.LinkedHashSet as, java.util.LinkedHashSet fs)
          NOTA: Al ser creado e inicializado el objeto, el constructor anhade a mayores, automatica y explicitamente, el epsilon (caracter especial Terminal.EPSILON) al alfabeto del automata.
AFabstracto(java.lang.String af)
           
 
Method Summary
 boolean check_arco(Arco a)
          Comprueba si un arco/transicion es valido
 boolean contains_arco(Arco a)
          Comprueba si el automata contiene un arco/transicion determinado
 boolean contains_estado(Estado q)
          Comprueba si el automata contiene un estado determinado
 boolean contains_terminal(Terminal t)
          Comprueba si el automata contiene en su alfabeto un terminal determinado
 Estado create_estado()
          Crea un nuevo estado distinto a los actualmente almacenados en el automata.
private  void createDOT(java.lang.String fdot)
          Crea una representacion del automata en el formato aceptado por el programa 'dot' del Graphviz.
private  void createPIC(java.lang.String fdot, java.lang.String fpic)
          Crea una representacion del automata en formato JPG a partir de su representacion en el formato de entrada del programa 'dot' del Graphviz.
 void dibujar(boolean p)
          Crea una representacion grafica del automata empleando el programa dot de Graphicviz.
 boolean esFinal(Estado q)
          Comprueba si un estado es final
 boolean esInicial(Estado q)
          Comprueba si un estado es inicial
 java.lang.String get_tabla_transiciones()
          Obtiene la tabla de transiciones del automata.
 java.util.LinkedHashSet getAlfabeto()
          Devuelve el alfabeto del automata
 java.util.LinkedHashSet getArcos()
          Devuelve el conjunto de arcos/transiciones del automata
 java.util.LinkedHashSet getArcosPpo(Estado q)
          Devuelve el conjunto de arcos/transiciones del automata que salen de un estado dado
 java.util.LinkedHashSet getArcosPpoTerminal(Estado q, Terminal t)
          Devuelve el conjunto de arcos/transiciones del automata que salen de un estado dado y estan etiquetados con un terminal dado
 java.util.LinkedHashSet getEstados()
          Devuelve el conjunto de estados del automata
 java.util.LinkedHashSet getFinales()
          Devuelve el conjunto de estados finales del automata
 Estado getInicial()
          Devuelve el estado inicial del automata
 java.lang.String toString()
          Devuelve la especificacion del automata en formato string (vease AFabstracto(String)).
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

MAX_ESTADOS

protected final int MAX_ESTADOS
Numero maximo de estados admitidos por el automata (1000 estados).

See Also:
Constant Field Values

estados

protected java.util.LinkedHashSet estados
Conjunto de estados del automata. Se implementa mediante un LinkedHashSet de objetos de tipo Estado.


alfabeto

protected java.util.LinkedHashSet alfabeto
Alfabeto aceptado por el automata. Se implementa mediante un LinkedHashSet de objetos de tipo Terminal.


inicial

protected Estado inicial
Estado inicial del automata. Se implementa mediante un objeto de tipo Estado.


arcos

protected java.util.LinkedHashSet arcos
Conjunto de arcos o transiciones del automata. Se implementa mediante LinkedHashSet de objetos de tipo Arco.


finales

protected java.util.LinkedHashSet finales
Conjunto de estados finales del automata. Se implementa mediante un LinkedHashSet de objetos de tipo Estado.


i

protected static int i
Variable auxiliar para la numeracion de los ficheros auxiliares creados para los dibujos de los automatas.

Constructor Detail

AFabstracto

public AFabstracto(java.lang.String af)
            throws AF_Exception,
                   G_Exception
Parameters:
af - Especificacion del automata en formato string. Primeramente, enumeraremos los identificadores de los estados del automata, no mas de MAX_ESTADOS), separados por espacios y con un punto y coma cerrando la lista. Se puede emplear cualquier cadena de caracteres como identificador de un estado (vease Estado).

Seguidamente, enumeraremos el alfabeto o conjunto de simbolos de entrada aceptados por el automata, de nuevo separados por espacios y cerrada por un punto y coma. El espacio de nombres valido es el de los caracteres en minuscula entre la 'a' y la 'z' y los digitos '0' al '9' (vease Terminal).
NOTA: Al ser creado e inicializado el objeto, el constructor anhade a mayores, automatica y explicitamente, el epsilon (caracter especial Terminal.EPSILON) al alfabeto del automata. Si bien esto no es formalmente correcto, se trata de un recurso de implementacion que permite simplificar el funcionamiento del automata.

A continuacion, especificaremos el identificador del estado inicial del automata, seguido de un punto y coma. El estado inicial debe ser uno de los estados previamente declarados.

Seguidamente, debera aparecer la lista con el conjunto de estados finales, separados por espacios y cerrada por un punto y coma. Los estados finales deberan pertenecer al conjunto de estados previamente declarados.

Por ultimo, listaremos el conjunto de arcos o transiciones del automata. Cada uno de estos arcos debe tener el formato estado_origen estado_destino simbolo; donde estado_origen y estado_destino deben ser estados previamente declarados, y simbolo debe ser un simbolo de entrada previamente declarado o bien el caracter especial epsilon (Terminal.EPSILON).

Asi pues, por ejemplo, dada la especificacion

0 1 2 3; a b c; 0; 1 3; 0 1 a; 1 1 b; 1 2 a; 2 0 $; 2 3 $; 2 3 c;


esta representa el automata finito


Throws:
AF_Exception
G_Exception

AFabstracto

public AFabstracto(java.util.LinkedHashSet qs,
                   java.util.LinkedHashSet ab,
                   Estado i,
                   java.util.LinkedHashSet as,
                   java.util.LinkedHashSet fs)
            throws AF_Exception,
                   G_Exception
NOTA: Al ser creado e inicializado el objeto, el constructor anhade a mayores, automatica y explicitamente, el epsilon (caracter especial Terminal.EPSILON) al alfabeto del automata. Si bien esto no es formalmente correcto, se trata de un recurso de implementacion que permite simplificar el funcionamiento del automata.

Parameters:
qs - Conjunto de estados del automata
ab - Alfabeto del automata
i - Estado inicial
as - Conjunto de arcos/transiciones del automata
fs - Conjunto de estados finales
Throws:
AF_Exception
G_Exception
Method Detail

getEstados

public java.util.LinkedHashSet getEstados()
Devuelve el conjunto de estados del automata

Returns:
Conjunto de estados del automata

getInicial

public Estado getInicial()
Devuelve el estado inicial del automata

Returns:
Estado inicial del automata

getFinales

public java.util.LinkedHashSet getFinales()
Devuelve el conjunto de estados finales del automata

Returns:
Conjunto de estados finales del automata

getAlfabeto

public java.util.LinkedHashSet getAlfabeto()
Devuelve el alfabeto del automata

Returns:
Alfabeto del automata (conjunto de objetos Terminal)

getArcos

public java.util.LinkedHashSet getArcos()
Devuelve el conjunto de arcos/transiciones del automata

Returns:
Conjunto de arcos/transiciones del automata

getArcosPpo

public java.util.LinkedHashSet getArcosPpo(Estado q)
Devuelve el conjunto de arcos/transiciones del automata que salen de un estado dado

Parameters:
q - Estado origen
Returns:
Conjunto de arcos/transiciones del automata que salen de dicho estado

toString

public java.lang.String toString()
Devuelve la especificacion del automata en formato string (vease AFabstracto(String)).

Overrides:
toString in class java.lang.Object

esInicial

public boolean esInicial(Estado q)
Comprueba si un estado es inicial

Parameters:
q - Estado a comprobar
Returns:
True/false segun sea o no estado inicial

esFinal

public boolean esFinal(Estado q)
Comprueba si un estado es final

Parameters:
q - Estado a comprobar
Returns:
True/false segun sea o no estado final

contains_estado

public boolean contains_estado(Estado q)
Comprueba si el automata contiene un estado determinado

Parameters:
q - Estado a comprobar
Returns:
True/false segun contenga o no dicho estado

contains_terminal

public boolean contains_terminal(Terminal t)
Comprueba si el automata contiene en su alfabeto un terminal determinado

Parameters:
t - Simbolo terminal a comprobar
Returns:
True/false segun lo contenga o no en su alfabeto

contains_arco

public boolean contains_arco(Arco a)
Comprueba si el automata contiene un arco/transicion determinado

Parameters:
a - Arco/transicion a comprobar
Returns:
True/false segun contenga o no dicho arco

check_arco

public boolean check_arco(Arco a)
Comprueba si un arco/transicion es valido

Parameters:
a - Arco/transicion a comprobar
Returns:
True/false segun sea valido o no

create_estado

public Estado create_estado()
                     throws AF_Exception
Crea un nuevo estado distinto a los actualmente almacenados en el automata. Los identificados de estos estados seguiran un formato q0, q1, q2, etc., empezando a numerar en el qN minimo necesario para no coincidir con ningun identificador de los estados actuales del automata.

Returns:
Nuevo estado creado
Throws:
AF_Exception - se ha alcanzado el numero maximo de estados permitidos MAX_ESTADOS
See Also:
Estado.get_estado_diferente(Collection)

get_tabla_transiciones

public java.lang.String get_tabla_transiciones()
Obtiene la tabla de transiciones del automata. Los estados iniciales aparecen marcados con '->' y los finales con '*'.

Returns:
Cadena representando la tabla de transiciones.

createDOT

private void createDOT(java.lang.String fdot)
                throws java.io.IOException
Crea una representacion del automata en el formato aceptado por el programa 'dot' del Graphviz.

Parameters:
fdot - Fichero .dot en el que se almacenara la representacion.
Throws:
java.io.IOException

createPIC

private void createPIC(java.lang.String fdot,
                       java.lang.String fpic)
                throws java.io.IOException
Crea una representacion del automata en formato JPG a partir de su representacion en el formato de entrada del programa 'dot' del Graphviz.

Parameters:
fdot - Fichero .dot que almacena la representacion en el formato de entrada de 'dot' de Graphviz.
fpic - Fichero en el que se almacenara la representacion en formato JPG.
Throws:
java.io.IOException

dibujar

public void dibujar(boolean p)
             throws java.io.IOException
Crea una representacion grafica del automata empleando el programa dot de Graphicviz. La representacion del automata en formato .DOT se almacena en el fichero temporal dibujo*_AF.tmp.dot, y en formato JPG en dibujo*_AF.tmp.jpg.

Parameters:
p - Switch indicando si se debe o no mostrar por pantalla la grafica JPG.
Throws:
java.io.IOException

getArcosPpoTerminal

public java.util.LinkedHashSet getArcosPpoTerminal(Estado q,
                                                   Terminal t)
Devuelve el conjunto de arcos/transiciones del automata que salen de un estado dado y estan etiquetados con un terminal dado

Parameters:
q - Estado origen
t - Terminal etiqueta del arco
Returns:
Conjunto de arcos/transiciones del automata que salen de dicho estado y estan etiquetados con dicho terminal