Gramaticas
Class ReglaGIC

java.lang.Object
  extended by Gramaticas.ReglaAbstracta
      extended by Gramaticas.ReglaGIC
Direct Known Subclasses:
ReglaCYK3

public class ReglaGIC
extends ReglaAbstracta

Clase para la implementacion interna de las reglas de una Gramatica Independiente del Contexto (GIC). Se implementa mediante una serie de atributos descritos pormenorizadamente mas abajo.

Al contrario que en otras clases, para obtener el objeto regla asociado a su especificacion en formato string (ver GIC) no emplearemos su constructor, sino el metodo estatico listaReglaGIC(String), que descompone

Version:
Revision 1.0.0, 06/19/06
Author:
Jesus Vilares ( jvilares@udc.es)

Field Summary
protected  java.util.ArrayList drcha
          Parte derecha de la regla.
protected  No_terminal izqda
          Parte izquierda de la regla.
 
Constructor Summary
ReglaGIC(ReglaGIC regla)
          Crea una regla copia de otra
ReglaGIC(java.lang.String i, java.lang.String d)
          Dadas las partes izquierda y derecha de una regla "atomica" de una gramatica (es decir, sin "|" en la parte derecha), crea el objeto Regla asociado.
 
Method Summary
protected  boolean binarizada()
          Comprueba si la regla esta "binarizada" ---i.e. la parte derecha consta de 1 terminal o 1 terminal+1 no terminal
 boolean equals(java.lang.Object r)
           
protected  boolean es_hoja()
          Comprueba si es una regla "hoja" ---i.e. con solo terminales en la parte derecha.
(package private)  boolean es_regla_binaria_CYK()
          Comprueba, desde un punto de vista estrictamente sintactico, si es una regla binaria en FNC (i.e. si es de la forma A->BC)
 boolean es_regla_Epsilon()
          Comprueba si se trata de una regla-Epsilon
 boolean es_regla_FNC()
          Comprueba, desde un punto de vista estrictamente sintactico, si una regla esta en FNC (i.e. si es de la forma A->a o A->BC)
 boolean es_regla_FNC(No_terminal s)
          Comprueba, desde un punto de vista estrictamente sintactico, si una regla esta en FNC (i.e. si es de la forma A->a o A->BC), permitiendo tambien el caso S->Epsilon
 boolean es_regla_S_Epsilon(No_terminal s)
          Comprueba si es una regla S->Epsilon
(package private)  boolean es_regla_unaria_CYK()
          Comprueba, desde un punto de vista estrictamente sintactico, si es una regla unaria en FNC (i.e. si es de la forma A->a)
protected  boolean es_regular()
          Comprueba si una regla es "regular" (i.e. su parte derecha contiene a lo sumo 1 no terminal, y este debera ser el ultimo simbolo de la regla)
 java.util.ArrayList get_drcha()
          Devuelve el ArrayList de objetos Simbolo que implementa la parte izquierda de la regla.
 No_terminal get_izqda()
          Devuelve el No_terminal que implementa la parte izquierda de la regla.
 int hashCode()
           
static java.util.LinkedList listaReglaGIC(java.lang.String s)
          Dada una regla de una gramatica, devuelve una lista con los objetos ReglaGIC asociados a las diferentes reglas "atomicas" que contiene, una por cada una de las partes izquierdas separadas por '|'.
 boolean matchea_1terminal_CYK(Terminal t)
          Comprueba si el terminal en cuestion matchea con la parte derecha de esta regla
 boolean matchea_2noterminales_CYK(No_terminal x, No_terminal y)
          Comprueba si el par de no terminales en cuestion matchea con la parte derecha de esta regla
 java.lang.String toString()
          Devuelve la especificacion en formato string de la regla (vease GIC)
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

izqda

protected No_terminal izqda
Parte izquierda de la regla. Se implementa mediante un objeto No_terminal que representa el no terminal que constituye la parte izquierda de una regla en una GIC. De esta forma, dada una regla:

S -> a B


este atributo almacenaria un objeto No_terminal representando el 'S'.


drcha

protected java.util.ArrayList drcha
Parte derecha de la regla. Se implementa mediante un ArrayList de objetos de tipo Simbolo que representan los diferentes terminales y no terminales de la parte derecha de una GIC. Dichos objetos tipo Simbolo son almacenados con el mismo orden y tipo (Terminal o No_terminal) que en la parte derecha de la regla. De esta forma, dada una regla:

S -> a B


este atributo almacenaria un ArrayList donde el primer elemento seria un objeto de tipo Terminal representando el 'a', y el segundo un objeto No_terminal representando el 'B'.

Constructor Detail

ReglaGIC

public ReglaGIC(java.lang.String i,
                java.lang.String d)
         throws G_Exception
Dadas las partes izquierda y derecha de una regla "atomica" de una gramatica (es decir, sin "|" en la parte derecha), crea el objeto Regla asociado.

Parameters:
i - String con la parte izquierda de la regla
d - String con la parte derecha de la regla
Throws:
G_Exception

ReglaGIC

public ReglaGIC(ReglaGIC regla)
         throws G_Exception
Crea una regla copia de otra

Parameters:
regla - Regla original
Throws:
G_Exception
Method Detail

equals

public boolean equals(java.lang.Object r)
Overrides:
equals in class java.lang.Object

hashCode

public int hashCode()
Overrides:
hashCode in class java.lang.Object

toString

public java.lang.String toString()
Devuelve la especificacion en formato string de la regla (vease GIC)

Overrides:
toString in class java.lang.Object
See Also:
Object.toString()

listaReglaGIC

public static java.util.LinkedList listaReglaGIC(java.lang.String s)
                                          throws G_Exception
Dada una regla de una gramatica, devuelve una lista con los objetos ReglaGIC asociados a las diferentes reglas "atomicas" que contiene, una por cada una de las partes izquierdas separadas por '|'. De esta forma, dada la regla

S -> a B|$


devolvera una LinkedList con dos objetos ReglaGIC: uno para la regla S -> a B, y otro para la regla S -> $. En el caso de que la regla sea "atomica" (es decir, sin '|' en su parte izquierda), devolvera una lista con un unico objeto, el ReglaGIC asociado a dicha regla.

Parameters:
s - Regla en formato string
Returns:
con los objetos Regla asociadas a las diferentes reglas "atomicas" que contiene (una por cada parte izquierda separada por "|").
Throws:
G_Exception

get_izqda

public No_terminal get_izqda()
Devuelve el No_terminal que implementa la parte izquierda de la regla.

Returns:
Parte izquierda de la regla.

get_drcha

public java.util.ArrayList get_drcha()
Devuelve el ArrayList de objetos Simbolo que implementa la parte izquierda de la regla.

Returns:
Parte derecha de la regla.

es_regular

protected boolean es_regular()
Comprueba si una regla es "regular" (i.e. su parte derecha contiene a lo sumo 1 no terminal, y este debera ser el ultimo simbolo de la regla)

Returns:
true/false segun sea o no una regla "regular"

es_hoja

protected boolean es_hoja()
Comprueba si es una regla "hoja" ---i.e. con solo terminales en la parte derecha.

Returns:
true/false segun sea o no regla "hoja"

binarizada

protected boolean binarizada()
Comprueba si la regla esta "binarizada" ---i.e. la parte derecha consta de 1 terminal o 1 terminal+1 no terminal

Returns:
true/false segun la regla este o no "binarizada"

es_regla_Epsilon

public boolean es_regla_Epsilon()
Comprueba si se trata de una regla-Epsilon

Returns:
true/false segun sea o no una regla-Epsilon

es_regla_S_Epsilon

public boolean es_regla_S_Epsilon(No_terminal s)
Comprueba si es una regla S->Epsilon

Parameters:
s - Axioma S de la gramatica
Returns:
true/false segun sea o no una regla S->Epsilon

es_regla_unaria_CYK

boolean es_regla_unaria_CYK()
Comprueba, desde un punto de vista estrictamente sintactico, si es una regla unaria en FNC (i.e. si es de la forma A->a)

Returns:
true/false segun este o no en FNC

es_regla_binaria_CYK

boolean es_regla_binaria_CYK()
Comprueba, desde un punto de vista estrictamente sintactico, si es una regla binaria en FNC (i.e. si es de la forma A->BC)

Returns:
true/false segun este o no en FNC

es_regla_FNC

public boolean es_regla_FNC()
Comprueba, desde un punto de vista estrictamente sintactico, si una regla esta en FNC (i.e. si es de la forma A->a o A->BC)

Returns:
true/false segun este o no en FNC

es_regla_FNC

public boolean es_regla_FNC(No_terminal s)
Comprueba, desde un punto de vista estrictamente sintactico, si una regla esta en FNC (i.e. si es de la forma A->a o A->BC), permitiendo tambien el caso S->Epsilon

Parameters:
s - Axioma S de la gramatica
Returns:
true/false segun este o no en FNC

matchea_1terminal_CYK

public boolean matchea_1terminal_CYK(Terminal t)
Comprueba si el terminal en cuestion matchea con la parte derecha de esta regla

Parameters:
t - Terminal con el que matchear
Returns:
true/false segun matchee o no

matchea_2noterminales_CYK

public boolean matchea_2noterminales_CYK(No_terminal x,
                                         No_terminal y)
Comprueba si el par de no terminales en cuestion matchea con la parte derecha de esta regla

Parameters:
x - Primer no terminal con el que matchear
y - Segundo no terminal con el que matchear
Returns:
true/false segun matchee o no