Gramatika typu 3Pravá -> Gramatika typu 3Pravá regulární – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Gramatika typu 3Pravá -> Gramatika typu 3Pravá regulární – Java – Fórum – Programujte.comGramatika typu 3Pravá -> Gramatika typu 3Pravá regulární – Java – Fórum – Programujte.com

 

Čam
~ Anonymní uživatel
5 příspěvků
29. 1. 2012   #1
-
0
-

Zdravím, potřeboval bych poradit s programem, který zpracovává Gramatiku typu 3Pravá a podle přepisovacích pravidel (X->&Y, X->e). Program zvládne pokud je zastoupen pouze jeden neterminální znak (velké písmeno). Pokud jsou zastoupeny 2 a více neterminálních znaků, program si neporadí s grafem dosažitelnosti (na co se přepisuje jeden Neterminální znak, na to se musí přepisovat i druhý), viz. přiklady.

vstupem je
 A -> aA |  B
 B -> bB |  C
 C -> cC |  k
graf dosažitelnosti je A-->B-->C
program dává výstup
 A -> aA |  bB
 B -> bB |  cC |  kD
 C -> cC |  kD
 D -> $
 Chybí tam zpracovat, že C je dosažitelné z A. Výstup by tedy měl být
 A -> aA |  bB |  cC |  kD
 B -> bB |  cC |  kD
 C -> cC |  kD
 D -> $

 
Zde je metoda, ve které je podle mého názoru problém. Neměl by někdo prosím nějaký nápad, začínám z toho být docela zoufalý. Děkuji.

/**
 * Meotda zpracovava prepisovaci pravidlo N->N.
 * 
 */

public static void Neterminaly () {
 
   final int konec=5; //konec vyznamnych znaku v retezci	
	
  boolean prazdny=false;
	
  for (String aktualniRadek : neterPrav) { // probehne cele pole pravidel
    char prvniPismeno = aktualniRadek.charAt(0);
    int prvni = najdiPozici(prvniPismeno);
    String zvetsitVel= vystupniPole.get(prvni);
    if(zvetsitVel.charAt(zvetsitVel.length()-1)=='$') {
      String pomoc = "";
      for (int k = 0; k < zvetsitVel.length()-konec; k++) {  //zvetseni potrebneho vystupu
        pomoc=pomoc+zvetsitVel.charAt(k);
        prazdny=true;
      }
      zvetsitVel = pomoc;
    }      
    if (zvetsitVel.length()>4) {
    	zvetsitVel+=" |  ";
    }
    else {
    	zvetsitVel+=" -> ";
    }
    
    char druhePismeno = aktualniRadek.charAt(1);
    int druheCislo = najdiPozici(druhePismeno);
    String copyString = vystupniPole.get(druheCislo);
    if (copyString.charAt(copyString.length()-1)=='$') {
      prazdny=false;
    }
    for (int i = konec; i < copyString.length(); i++) {
    	zvetsitVel+=copyString.charAt(i);
    }
    if (prazdny) {
    	zvetsitVel+=" |  $";
    }
    vystupniPole.set(prvni, zvetsitVel);


  
    
  }
}
Nahlásit jako SPAM
IP: 81.200.55.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Podobná vlákna

AJ - gramatika — založil xp

Maximum typu — založil gody

Proměnná typu — založil Ondra

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý