webovyformular.dat_typy
Class Gramatika

java.lang.Object
  extended by webovyformular.dat_typy.Gramatika

public class Gramatika
extends java.lang.Object

Description:

Třída slouží pro reprezentaci bezkontextových gramatik a pro práci s nimi.

Copyright: Copyright (c) 2005


Constructor Summary
Gramatika(java.util.HashSet<Znak> neterminaly, java.util.HashSet<Znak> terminaly, java.util.HashMap<Znak,java.util.HashSet<java.util.ArrayList<Znak>>> pravidla, Znak pocatek)
          Vytvoří se nová gramatika, která bude obsahovat terminály, neterminály, pravidla a počáteční neterminál zadané na vstupu.
 
Method Summary
 boolean equals(java.lang.Object obj)
          Metoda equals porovná gramatiku s objektem obj a vrátí true, pokud je objekt gramatika a obsahuje stejné množiny neterminálů, terminálů a pravidel a ma i stejný počáteční neterminál.
 java.util.HashSet<Znak> getNeterminaly()
          Vrací množinu neterminálů.
 Znak getPocatek()
          Vrací počáteční neterminál.
 java.util.HashMap<Znak,java.util.HashSet<java.util.ArrayList<Znak>>> getPravidla()
          Vrací množinu pravidel.
 java.util.HashSet<Znak> getTerminaly()
          Vrací množinu terminálů.
 int hashCode()
          Metoda hashCode vrací hodnotu hesovaciho kodu pro danou gramatiku.
 boolean isSll(int k)
          Metoda rozhoduje, zda je zadaná gramatika SLL_k pro zadané k.
 Gramatika redukuj()
          Metoda odstraní z gramatiky nepoužitelné symboly a tuto redukovanou gramatiku vrací na výstup.
 java.lang.String toString()
          Převede gramatiku na String tak, že výsledný řetězec obsahuje následující:

"Množina neterminálů: {" + n + "} \n" +
"Množina terminálů: {" + t + "} \n" +
"Množina pravidel: {\n" + p + "} \n" +
"Počátečni neterminál: " + pocatek;


kde n jsou jména neterminálů oddělena mezerami,
t jsou jména terminálů oddělena mezerami,
p jsou pravidla gramatiky zobrazená tak, že na každém řádku je neterminál následován znaky " -> " a za nimi řetězce, na které se může daný neterminál přepsat, oddělené znakem "|".
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

Gramatika

public Gramatika(java.util.HashSet<Znak> neterminaly,
                 java.util.HashSet<Znak> terminaly,
                 java.util.HashMap<Znak,java.util.HashSet<java.util.ArrayList<Znak>>> pravidla,
                 Znak pocatek)
Vytvoří se nová gramatika, která bude obsahovat terminály, neterminály, pravidla a počáteční neterminál zadané na vstupu.

Parameters:
neterminaly - HashSet - množina terminálů
terminaly - HashSet - množina neterminálů
pravidla - HashMap - množina pravidel
pocatek - Znak - počáteční neterminál
Method Detail

equals

public boolean equals(java.lang.Object obj)
Metoda equals porovná gramatiku s objektem obj a vrátí true, pokud je objekt gramatika a obsahuje stejné množiny neterminálů, terminálů a pravidel a ma i stejný počáteční neterminál.

Overrides:
equals in class java.lang.Object
Parameters:
obj - Object - objekt
Returns:
boolean - vrací true, když jsou gramatika a objekt totožní

hashCode

public int hashCode()
Metoda hashCode vrací hodnotu hesovaciho kodu pro danou gramatiku. Hash code se vypočítá jako součet hash code všech neterminálů, terminálů, pravidel a počátečního neterminálu.

Overrides:
hashCode in class java.lang.Object
Returns:
int - hodnota hash code pro danou gramatiku

toString

public java.lang.String toString()
Převede gramatiku na String tak, že výsledný řetězec obsahuje následující:

"Množina neterminálů: {" + n + "} \n" +
"Množina terminálů: {" + t + "} \n" +
"Množina pravidel: {\n" + p + "} \n" +
"Počátečni neterminál: " + pocatek;


kde n jsou jména neterminálů oddělena mezerami,
t jsou jména terminálů oddělena mezerami,
p jsou pravidla gramatiky zobrazená tak, že na každém řádku je neterminál následován znaky " -> " a za nimi řetězce, na které se může daný neterminál přepsat, oddělené znakem "|". Pravidla počátečního neterminálu jsou uvedena jako první.

Overrides:
toString in class java.lang.Object
Returns:
String - String reprezentující danou gramatiku

getNeterminaly

public java.util.HashSet<Znak> getNeterminaly()
Vrací množinu neterminálů.

Returns:
HashSet - množina neterminálů

getTerminaly

public java.util.HashSet<Znak> getTerminaly()
Vrací množinu terminálů.

Returns:
HashSet - množina terminálů

getPravidla

public java.util.HashMap<Znak,java.util.HashSet<java.util.ArrayList<Znak>>> getPravidla()
Vrací množinu pravidel.

Returns:
HashMap - množina pravidel

getPocatek

public Znak getPocatek()
Vrací počáteční neterminál.

Returns:
Znak - počáteční neterminál

redukuj

public Gramatika redukuj()
Metoda odstraní z gramatiky nepoužitelné symboly a tuto redukovanou gramatiku vrací na výstup. Původní gramatika zůstává nezměněna.

Returns:
Gramatika - gramatika bez nepoužitelných symbolů

isSll

public boolean isSll(int k)
              throws NekladnyParamException
Metoda rozhoduje, zda je zadaná gramatika SLL_k pro zadané k. Metoda vrací true právě tehdy, když je zadaná gramatika SLL_k.Podminky pro to, aby gramatika byla SLL_k:
pro všechny neterminály A z množiny neterminálů a pravidla ve tvaru
A->alfa, A->beta, kde alfa != beta , platí:
First_k(alfa.Follow_k(A)) "průnik s" First_k(beta.Follow_k(A)) = "prázdná množina"

Parameters:
k - int - paramter k
Returns:
boolean - true, když je daná gamatika SLL_k
Throws:
NekladnyParamException - když parametr není kladné číslo