package com.imegumii; import java.io.*; import java.nio.Buffer; /** * Created by kenny on 8-6-2017. */ public class FileParser { public static Importable read(String filename) { File f = new File("input/" + filename); Importable imp = null; try (BufferedReader br = new BufferedReader(new FileReader(f))) { String type = br.readLine(); switch (type) { case "DFA": imp = readDFA(br); break; case "NDFA": imp = readNDFA(br); break; case "REGEX": imp = readRegex(br); break; default: break; } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return imp; } public static DFA readDFA(BufferedReader br) throws IOException { DFA dfa = new DFA(); String line; while ((line = br.readLine()) != null) { if(line.startsWith("B")) { String[] states = line.substring(1,line.length()).split(","); for(String s : states) { dfa.defineAsStartState(s); } } else if(line.startsWith("E")) { String[] states = line.substring(1,line.length()).split(","); for(String s : states) { dfa.defineAsEndState(s); } } else { String[] trans = line.split(">"); dfa.addTransition(new Transition(trans[0], trans[1].toCharArray()[0], trans[2])); } } return dfa; } public static NDFA readNDFA(BufferedReader br) throws IOException { NDFA ndfa = new NDFA(); String line; while ((line = br.readLine()) != null) { if(line.startsWith("B")) { String[] states = line.substring(1,line.length()).split(","); for(String s : states) { ndfa.defineAsStartState(s); } } else if(line.startsWith("E")) { String[] states = line.substring(1,line.length()).split(","); for(String s : states) { ndfa.defineAsEndState(s); } } else { String[] trans = line.split(">"); if(trans[1].equals("$")) { ndfa.addTransition(new Transition(trans[0], Transition.EPSILON, trans[2])); } else ndfa.addTransition(new Transition(trans[0], trans[1].toCharArray()[0], trans[2])); } } return ndfa; } public static RegExp readRegex(BufferedReader br) throws IOException { String line = "Error"; line = br.readLine(); RegExp regex = new RegExp(); regex = regex.naarRegExp(line); return regex; } }