CFG OTOMATA MACHİNE(cfg otomata teorisi)

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
 
public class CFG {
ArrayList<String> div = new ArrayList<String>();
ArrayList<String> alphabet = new ArrayList<String>();
ArrayList<String> term = new ArrayList<String>();
ArrayList<String> path = new ArrayList<String>();
ArrayList<String> path2 = new ArrayList<String>();
ArrayList<String> result = new ArrayList<String>();
 
public CFG() {
readFile();
}
public void readFile() {
File inFile = new File("cfg.txt");
Scanner read = null;
String temp;
try {
read = new Scanner(inFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while (read.hasNext()) {
temp = read.nextLine();
div.add(temp);
}
for (int i = 0; i < div.get(0).length(); i++) {
if (div.get(0).charAt(i) != '{' && div.get(0).charAt(i) != ',' && div.get(0).charAt(i) != '}' && div.get(0).charAt(i) != ' ') {
alphabet.add(String.valueOf(div.get(0).charAt(i)));
}
}
//System.out.println("Read from file => " + div);
System.out.println("Σ = " + alphabet);
System.out.println("CFG = " + div.get(1) + "\n");
String test = "";
int x, y = -1;
for (int i = 1; i < div.size(); i++) {
for (int j = 0; j < div.get(i).length(); j++) {
if (j + 1 != div.get(i).length()) {
if (div.get(i).charAt(j + 1) == '-' && div.get(i).charAt(j + 2) == '-') {
term.add(String.valueOf(div.get(i).charAt(j)));
for (int k = j + 4; k < div.get(i).length(); k++) {
if (div.get(i).charAt(k) == ',') {
path.add(test);
path2.add(test);
test = "";
break;
} else if (div.get(i).charAt(k) == '|') {
path.add(test);
path2.add(test);
test = "";
continue;
} else if (k + 1 == div.get(i).length()) {
test = String.valueOf(div.get(i).charAt(k));
path.add(test);
path2.add(test);
test = "";
} else test = test + div.get(i).charAt(k);
}
System.out.println(div.get(i).charAt(j) + " -> " + path);
if (y < path.size()) y = path.size();
path.clear();
}
} else if (div.get(i).charAt(j) == '-' || div.get(i).charAt(j) == '>') continue;
else if (div.get(i).charAt(j) == '|') continue;
}
}
x = term.size();
String test2[][] = new String[x][y];
int k = 0;
int save = 0;
for (int i = 0; i < x; i++) {
test2[i][0] = term.get(i);
for (int j = 0; j < y; j++) {
test2[i][j] = path2.get(k);
k++;
}
if (path2.size() - k == 0) save = y;
y = path2.size() - k;
}
System.out.println("\nT or NT => " + term);
System.out.println("Paths => " + path2);
System.out.println();
String sum = "";
String prev = "";
boolean nonTerm = false;
for (int i = 0; i < path2.size(); i++) {
for (int j = 0; j < path2.get(i).length(); j++) {
if (term.get(1).equals(String.valueOf(path2.get(i).charAt(j)))) {
if (j + 1 == path2.get(i).length()) {
prev = sum;
for (int t = 0; t < save; t++) {
sum = sum + test2[1][t];
if (!test2[1][t].equals(sum)) {
System.out.println("\tGenerated: " +  sum);
result.add(sum);
}
sum = prev;
}
sum = "";
} else if (term.get(1).equals(String.valueOf(path2.get(i).charAt(j + 1)))) {
prev = sum;
for (int t = 0; t < save; t++) {
sum = sum + test2[1][t] + term.get(1);
//result.add(sum);
path2.add(sum);
sum = prev;
}
sum = "";;
}
nonTerm = true;
} else {
sum = sum + String.valueOf(path2.get(i).charAt(j));
}
}
if (!sum.equals("") && nonTerm == false) result.add(sum);
sum = "";
prev = "";
}
System.out.println();
System.out.println("If it has Non-Term => " + path2);
System.out.println("Final => " + result);
}
public static void main(String[] args) {
new CFG();
}
}





Burda  txtden okudugumuz için txttinin içerigi şu şekilde olmaktadır...

{a, b, X}
S-->aa|bX|aXXXX, X-->ab|b
 
Sitemizin tüm hakları saklıdır.
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol