import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Stack;
import java.util.TreeMap;
import java.util.TreeSet;
public class SimPa {
List<String> info = new LinkedList<>();
while ((redak = reader.readLine()) != null && !(redak.isEmpty())) {
info.add(redak);
}
string[] ulazniNizovi = crtaSplit
(info.
get(0));
string[] svaStanja = zarezSplit
(info.
get(1));
string[] sviZnakovi = zarezSplit
(info.
get(2));
string[] sviZnakoviStoga = zarezSplit
(info.
get(3));
string[] prihvatljivaStanja = zarezSplit
(info.
get(4));
string pocStanje = info.
get(5);
string pocZnakStoga = info.
get(6);
Set<String> setPrihvatljivih = new TreeSet<>();
for (int i = 0; i < prihvatljivaStanja.length; i++) {
setPrihvatljivih.add(prihvatljivaStanja[i]);
}
List<String> fjeprijelaza = new LinkedList<>();
int zast = 0;
if (zast >= 7) {
fjeprijelaza.add(iduci);
}
zast++;
}
Map<String, String> mapaFjaPrijelaza = new TreeMap<>();
for (string pom : fjeprijelaza
) {
string[] KeyVal = pom.
split("->");
mapaFjaPrijelaza.put(KeyVal[0], KeyVal[1]);
}
Stack<String> stog = new Stack<>();
for (int i = 0; i < ulazniNizovi.length; i++) {
stog.clear();
int uvjet = 0;
string[] ulazniNiz = zarezSplit
(ulazniNizovi
[i
]);
stog.push(pocZnakStoga);
system.
out.
print(pocStanje +
"#" + stog.
peek() +
"|");
int j = 0;
string trenutnoStanje = pocStanje;
for (j = 0; j < ulazniNiz.length;) {
string kljuc = trenutnoStanje +
"," + ulazniNiz
[j
] +
"," + stog.
peek();
string kljucEps = trenutnoStanje +
",$," + stog.
peek();
if (mapaFjaPrijelaza.get(kljuc) != null) {
string iduce = mapaFjaPrijelaza.
get(kljuc
);
string[] novoStanjeElementiStoga = iduce.
split(",");
trenutnoStanje = novoStanjeElementiStoga[0];
string noviZnakoviStoga = novoStanjeElementiStoga
[1];
stog.pop();
system.
out.
print(trenutnoStanje +
"#");
for (int k = noviZnakoviStoga.length() - 1; k >= 0; k--) {
if (!
string.
valueOf(noviZnakoviStoga.
charAt(k
)).
equals("$")) {
stog.
push(string.
valueOf(noviZnakoviStoga.
charAt(k
)));
}
}
if (!elem.equals("$")) {
}
}
j++;
} else if (mapaFjaPrijelaza.containsKey(kljucEps)) {
string iduce = mapaFjaPrijelaza.
get(kljucEps
);
string[] novoStanjeElementiStoga = iduce.
split(",");
trenutnoStanje = novoStanjeElementiStoga[0];
string noviZnakoviStoga = novoStanjeElementiStoga
[1];
stog.pop();
system.
out.
print(trenutnoStanje +
"#");
for (int k = noviZnakoviStoga.length() - 1; k >= 0; k--) {
stog.
push(string.
valueOf(noviZnakoviStoga.
charAt(k
)));
}
}
} else {
system.
out.
println("fail|" +
0);
uvjet = 1;
break;
}
// ako nema te produkcije vrati ispisi fail i brejkaj sve za te nizove
}
int uvjet2 = 1;
if (setPrihvatljivih.contains(trenutnoStanje)) {
uvjet2 = 0;
}
while (uvjet2 == 1) {
string kljuc3 = trenutnoStanje +
",$," + stog.
peek();
if (mapaFjaPrijelaza.containsKey(kljuc3)) {
string iduce = mapaFjaPrijelaza.
get(trenutnoStanje +
",$," + stog.
peek());
string[] novoStanjeElementiStoga = iduce.
split(",");
trenutnoStanje = novoStanjeElementiStoga[0];
string noviZnakoviStoga = novoStanjeElementiStoga
[1];
stog.pop();
system.
out.
print(trenutnoStanje +
"#");
for (int k = noviZnakoviStoga.length() - 1; k >= 0; k--) {
stog.
push(string.
valueOf(noviZnakoviStoga.
charAt(k
)));
}
if(stog.size() == 1 && stog.peek().equals("$")){
}
else {
}
}
} else {
uvjet2 = 0;
}
if (setPrihvatljivih.contains(trenutnoStanje)) {
uvjet2 = 0;
}
}
if (uvjet == 1) {
uvjet = 0;
} else {
if (setPrihvatljivih.contains(trenutnoStanje)) {
} else {
}
}
}
}
string[] pomPolje = stanja.
split(",");
return pomPolje;
}
string[] pomPolje = stanja.
split("\\|");
return pomPolje;
}
}