Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.HashSet;
- /*
- Klasa i metoda koju poziva ispitni sustav SPPRUT.
- Nemojte mijenjati:
- - naziv datoteke
- - naziv klase
- - parametre konstruktora klase (konstruktor se poziva bez parametara)
- - naziv metode
- - broj ulaznih parametara
- - tipove ulaznih parametara
- - tip povratne vrijednosti
- Ulazni parametri:
- definicijaPA: string s definicijom funkcije prijelaza PA
- oblikovan prema uputama na FERWebu
- ulazniNiz: string s nizom znakova za koji PA provjerava da li se prihvaca
- Povratna vrijednost:
- int: 1 ako PA prihvaca niz
- 0 ako PA ne prihvaca niz
- */
- public class utrlab2 {
- public static void epsilon(HashSet<ArrayList<String>> konfiguracije, ArrayList<String[]> prijelazi) {
- HashSet <ArrayList<String>> tempKonf = new HashSet<ArrayList<String>>();
- String stog;
- String vrhStoga;
- for (ArrayList<String> konfiguracija:konfiguracije) {
- if (konfiguracija.get(1).length() >= 1) {
- vrhStoga = konfiguracija.get(1).substring(0,1);
- } else {
- vrhStoga = "";
- }
- if (konfiguracija.get(1).length() >= 1) {
- stog = konfiguracija.get(1).substring(1);
- } else {
- stog = "";
- }
- for (String[] prijelaz:prijelazi) {
- String[] tempProvjeraPrijelaza = prijelaz[0].split(",");
- if (tempProvjeraPrijelaza[0].equals(konfiguracija.get(0)) && tempProvjeraPrijelaza[1].equals("$") && vrhStoga.equals(tempProvjeraPrijelaza[2])){
- String[] novekonfiguracije = prijelaz[1].split("#");
- for (String novakonfiguracija:novekonfiguracije) {
- String[] tempKonfiguracija = novakonfiguracija.split(",");
- String noviStog = new String();
- if (tempKonfiguracija[1].equals("$")) {
- noviStog = stog;
- } else {
- noviStog = tempKonfiguracija[1].concat(stog);
- }
- String[] konfiguracija_za_dodavanje = new String[2];
- konfiguracija_za_dodavanje[0] = tempKonfiguracija[0];
- konfiguracija_za_dodavanje[1] = noviStog;
- ArrayList<String> prijenos = new ArrayList<String>();
- prijenos.add(konfiguracija_za_dodavanje[0]);
- prijenos.add(konfiguracija_za_dodavanje[1]);
- if (!konfiguracija_za_dodavanje[1].equals("")) {
- tempKonf.add(prijenos);
- }
- }
- }
- }
- }
- if (tempKonf.equals(konfiguracije)) return;
- epsilon(tempKonf, prijelazi);
- for (ArrayList<String> el:tempKonf) {
- konfiguracije.add(el);
- }
- }
- public utrlab2() {}
- public int utrlab2_f(String definicijaPA, String ulazniNiz) {
- ArrayList<String> skupStanja = new ArrayList<String>();
- ArrayList<String> prihZnak = new ArrayList<String>();
- ArrayList<String> znakoviStoga = new ArrayList<String>();
- ArrayList<String> prihStanja = new ArrayList<String>();
- ArrayList<String[]> prijelazi = new ArrayList<String[]>();
- String[] pocKonfiguracija = new String[2];
- HashSet<ArrayList<String>> trenKonf = new HashSet<ArrayList<String>>();
- String definicija = definicijaPA;
- String zadaniNiz = ulazniNiz;
- definicija = definicija.substring(1);
- String splitanadefinicija[] = definicija.split("%");
- String temp[] = splitanadefinicija[0].split(",");
- for (String el:temp) {
- skupStanja.add(el);
- }
- temp = splitanadefinicija[1].split(",");
- for (String el:temp) {
- prihZnak.add(el);
- }
- temp = splitanadefinicija[2].split(",");
- for (String el:temp) {
- znakoviStoga.add(el);
- }
- pocKonfiguracija[0]=splitanadefinicija[3];
- pocKonfiguracija[1] = splitanadefinicija[4];
- temp = splitanadefinicija[5].split(",");
- for (String el:temp) {
- prihStanja.add(el);
- }
- int i = 0;
- for ( i = 6; i <= (splitanadefinicija.length - 1); i++ ) {
- prijelazi.add(splitanadefinicija[i].split("->"));
- }
- String[] tempSplitaniNiz = zadaniNiz.split("");
- int duzina = tempSplitaniNiz.length - 1;
- String[] splitaniNiz = new String[duzina];
- System.arraycopy(tempSplitaniNiz, 1, splitaniNiz, 0, duzina);
- ArrayList<String> pockonfa = new ArrayList<String>();
- pockonfa.add(pocKonfiguracija[0]);
- pockonfa.add(pocKonfiguracija[1]);
- trenKonf.add(pockonfa);
- epsilon(trenKonf, prijelazi);
- int prijelaz_se_desio;
- String vrhStoga;
- String noviStog;
- String emptystring = new String("");
- for (String znak:splitaniNiz) {
- HashSet<ArrayList<String>> sljedKonfiguracije = new HashSet<ArrayList<String>>();
- for (ArrayList<String> konfiguracija:trenKonf) {
- if (konfiguracija.get(0).length() >= 1) {
- noviStog = konfiguracija.get(1).substring(1);
- } else {
- noviStog = emptystring;
- }
- if (konfiguracija.get(1).length() >= 1) {
- vrhStoga = konfiguracija.get(1).substring(0,1);
- } else {
- vrhStoga = emptystring;
- }
- prijelaz_se_desio = 0;
- for (String[] prijelaz:prijelazi) {
- prijelaz_se_desio = 0;
- String[] tempProvjeraPrijelaza = prijelaz[0].split(",");
- if ( (tempProvjeraPrijelaza[0].equals(konfiguracija.get(0))) && (tempProvjeraPrijelaza[1].equals(znak)) && (tempProvjeraPrijelaza[2].equals(vrhStoga)) ) {
- String novekonfiguracije[] = prijelaz[1].split("#");
- for (String novakonfiguracija:novekonfiguracije) {
- String[] tempKonfiguracija = novakonfiguracija.split(",");
- String stog = new String();
- if (tempKonfiguracija[1].equals("$")) {
- stog = noviStog;
- } else {
- stog = tempKonfiguracija[1].concat(noviStog);
- }
- String[] konfiguracija_za_dodavanje = new String[2];
- konfiguracija_za_dodavanje[0] = tempKonfiguracija[0];
- konfiguracija_za_dodavanje[1] = stog;
- ArrayList<String> prijenos = new ArrayList<String>();
- prijenos.add(konfiguracija_za_dodavanje[0]);
- prijenos.add(konfiguracija_za_dodavanje[1]);
- if (!konfiguracija_za_dodavanje[1].equals(emptystring)){
- sljedKonfiguracije.add(prijenos);
- }
- prijelaz_se_desio = 1;
- }
- break;
- }
- }
- if (prijelaz_se_desio == 0) {
- konfiguracija.add(1, noviStog);
- if (!konfiguracija.get(1).equals(emptystring)) {
- sljedKonfiguracije.add(konfiguracija);
- }
- }
- }
- epsilon(sljedKonfiguracije, prijelazi);
- if (!sljedKonfiguracije.isEmpty()) {
- trenKonf.clear();
- for (ArrayList<String> el:sljedKonfiguracije) {
- if (!el.get(1).equals(emptystring)) {
- trenKonf.add(el);
- }
- }
- } else {
- trenKonf.clear();
- }
- }
- int prih = 0;
- for (ArrayList<String> el:trenKonf) {
- if (prihStanja.contains(el.get(0))) {
- prih = 1;
- }
- }
- if (prih == 0 ) {
- return 0;
- } else {
- return 1;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement