From 6f9c72d287d8f1a8c08833f30ec500767591a29e Mon Sep 17 00:00:00 2001 From: Noah Heuser <nheuser@uni-koblenz.de> Date: Fri, 5 Apr 2024 17:12:27 +0200 Subject: [PATCH] Writer added, few renames --- ChatGPTParsing/.gitignore | 2 +- ...tContains.java => ListOfListContains.java} | 2 +- .../src/auxiliary/ListOfRulesContains.java | 13 ++++ ChatGPTParsing/src/json/GrammarToJSON.java | 61 +++++++++++---- .../src/type2/Type2GrammarGenerator.java | 8 +- ChatGPTParsing/src/type2/Type2Parser.java | 8 +- .../src/type3/Type3GrammarGenerator.java | 8 +- ChatGPTParsing/src/type3/Type3Parser.java | 4 +- ChatGPTParsing/src/writer/.gitignore | 1 + ChatGPTParsing/src/writer/Writer.java | 75 ++++++++++++++++++- 10 files changed, 148 insertions(+), 34 deletions(-) rename ChatGPTParsing/src/auxiliary/{ListofListContains.java => ListOfListContains.java} (87%) create mode 100644 ChatGPTParsing/src/auxiliary/ListOfRulesContains.java create mode 100644 ChatGPTParsing/src/writer/.gitignore diff --git a/ChatGPTParsing/.gitignore b/ChatGPTParsing/.gitignore index d08d94f..c27b429 100644 --- a/ChatGPTParsing/.gitignore +++ b/ChatGPTParsing/.gitignore @@ -1,2 +1,2 @@ /bin/ -.classpath \ No newline at end of file +/.classpath \ No newline at end of file diff --git a/ChatGPTParsing/src/auxiliary/ListofListContains.java b/ChatGPTParsing/src/auxiliary/ListOfListContains.java similarity index 87% rename from ChatGPTParsing/src/auxiliary/ListofListContains.java rename to ChatGPTParsing/src/auxiliary/ListOfListContains.java index 35c0b89..0de5e56 100644 --- a/ChatGPTParsing/src/auxiliary/ListofListContains.java +++ b/ChatGPTParsing/src/auxiliary/ListOfListContains.java @@ -2,7 +2,7 @@ package auxiliary; import java.util.List; -public class ListofListContains { +public class ListOfListContains { public static boolean contains(List<List<String>> container, List<String> contained) { for (List<String> c : container) { diff --git a/ChatGPTParsing/src/auxiliary/ListOfRulesContains.java b/ChatGPTParsing/src/auxiliary/ListOfRulesContains.java new file mode 100644 index 0000000..16922ac --- /dev/null +++ b/ChatGPTParsing/src/auxiliary/ListOfRulesContains.java @@ -0,0 +1,13 @@ +package auxiliary; + +import java.util.List; +import java.util.Map; + +public class ListOfRulesContains { + + public static boolean contains(List<Map<String, List<List<String>>>> container, + Map<String, List<List<String>>> contained) { + return false; + } + +} diff --git a/ChatGPTParsing/src/json/GrammarToJSON.java b/ChatGPTParsing/src/json/GrammarToJSON.java index 0561a61..ec7ffb5 100644 --- a/ChatGPTParsing/src/json/GrammarToJSON.java +++ b/ChatGPTParsing/src/json/GrammarToJSON.java @@ -11,6 +11,7 @@ import type3.Type3GrammarGenerator; public class GrammarToJSON { Type3GrammarGenerator gen3 = new Type3GrammarGenerator(); + Type2GrammarGenerator gen2 = new Type2GrammarGenerator(); private String createJSONGrammar(String[] vars, int alphaSize, Map<String, List<List<String>>> rules, String start) { @@ -46,8 +47,8 @@ public class GrammarToJSON { return grammarJSON.toString(); } - public String createJSONObject(String[] vars, int alphaSize, int maxConclusios, int maxConclusioSize, String start, - int type, int mode, int n) { + public List<String> createJSONGrammars(String[] vars, int alphaSize, int maxConclusios, int maxConclusioSize, + String start, int type, int mode, int n) { if (type == 3) { return createJSONObjectType3(vars, alphaSize, maxConclusios, start, mode, n); } else if (type == 2) { @@ -57,28 +58,60 @@ public class GrammarToJSON { } } - private String createJSONObjectType3(String[] vars, int alphaSize, int maxConclusios, String start, int mode, + private List<String> createJSONObjectType3(String[] vars, int alphaSize, int maxConclusios, String start, int mode, int n) { - List<Map<String, List<List<String>>>> grammarRuleSets = new LinkedList<>(); + List<Map<String, List<List<String>>>> ruleSets = new LinkedList<>(); switch (mode) { case 0: - grammarRuleSets = gen3.genType3GrammarRuleSets0(vars, alphaSize, maxConclusios, start, n); + ruleSets = gen3.genType3GrammarRuleSets0(vars, alphaSize, maxConclusios, start, n); + break; + case 1: + ruleSets = gen3.genType3GrammarRuleSets1(vars, alphaSize, maxConclusios, start, n); + break; + case 2: + ruleSets = gen3.genType3GrammarRuleSets2(vars, alphaSize, maxConclusios, start, n); + break; + case 3: + ruleSets = gen3.genType3GrammarRuleSets3(vars, alphaSize, maxConclusios, start, n); + break; + default: + break; } - - return null; + List<String> jsonGrammars = new LinkedList<>(); + for (Map<String, List<List<String>>> ruleSet : ruleSets) { + jsonGrammars.add(createJSONGrammar(vars, alphaSize, ruleSet, start)); + } + return jsonGrammars; } - private String createJSONObjectType2(String[] vars, int alphaSize, int maxConclusios, int maxConclusioSize, + private List<String> createJSONObjectType2(String[] vars, int alphaSize, int maxConclusios, int maxConclusioSize, String start, int mode, int n) { - // TODO Auto-generated method stub - return null; + List<Map<String, List<List<String>>>> ruleSets = new LinkedList<>(); + switch (mode) { + case 0: + ruleSets = gen2.genType2GrammarRuleSets0(vars, alphaSize, maxConclusios, maxConclusioSize, n); + break; + case 1: + ruleSets = gen2.genType2GrammarRuleSets1(vars, alphaSize, maxConclusios, maxConclusioSize, start, n); + break; + case 2: + ruleSets = gen2.genType2GrammarRuleSets2(vars, alphaSize, maxConclusios, maxConclusioSize, n); + break; + case 3: + ruleSets = gen2.genType2GrammarRuleSets3(vars, alphaSize, maxConclusios, maxConclusioSize, start, n); + break; + default: + break; + } + List<String> jsonGrammars = new LinkedList<>(); + for (Map<String, List<List<String>>> ruleSet : ruleSets) { + jsonGrammars.add(createJSONGrammar(vars, alphaSize, ruleSet, start)); + } + return jsonGrammars; } public static void main(String[] args) { - Type2GrammarGenerator g = new Type2GrammarGenerator(); - String[] vars = { "S", "A" }; - Map<String, List<List<String>>> rules = g.genType2GrammarRuleSet(vars, 2, 2, 2); - System.out.println(rules); + } } diff --git a/ChatGPTParsing/src/type2/Type2GrammarGenerator.java b/ChatGPTParsing/src/type2/Type2GrammarGenerator.java index 0c7a145..0917986 100644 --- a/ChatGPTParsing/src/type2/Type2GrammarGenerator.java +++ b/ChatGPTParsing/src/type2/Type2GrammarGenerator.java @@ -8,7 +8,7 @@ import java.util.Map; import java.util.Random; import java.util.Set; -import auxiliary.ListofListContains; +import auxiliary.ListOfListContains; import co_reachable.CoReachability; import reachable.Reachability; @@ -16,7 +16,7 @@ public class Type2GrammarGenerator { Random random = new Random(); - public Map<String, List<List<String>>> genType2GrammarRuleSet(String[] vars, int alphaSize, int maxConclusios, + private Map<String, List<List<String>>> genType2GrammarRuleSet(String[] vars, int alphaSize, int maxConclusios, int maxConclusioSize) { Map<String, List<List<String>>> rules = new LinkedHashMap<>(); for (String v : vars) { @@ -31,7 +31,7 @@ public class Type2GrammarGenerator { int numOfConclusios = random.nextInt(maxConclusios) + 1; while (conclusios.size() < numOfConclusios) { List<String> conclusio = genConclusio(alphaSize, vars, maxConclusioSize); - if (!ListofListContains.contains(conclusios, conclusio)) { + if (!ListOfListContains.contains(conclusios, conclusio)) { conclusios.add(conclusio); } } @@ -65,7 +65,7 @@ public class Type2GrammarGenerator { return s; } - public List<Map<String, List<List<String>>>> genType2GrammarRuleSets(String[] vars, int alphaSize, + public List<Map<String, List<List<String>>>> genType2GrammarRuleSets0(String[] vars, int alphaSize, int maxConclusios, int maxConclusioSize, int n) { List<Map<String, List<List<String>>>> grammarRuleSets = new LinkedList<>(); while (grammarRuleSets.size() < n) { diff --git a/ChatGPTParsing/src/type2/Type2Parser.java b/ChatGPTParsing/src/type2/Type2Parser.java index 56b99f2..f672047 100644 --- a/ChatGPTParsing/src/type2/Type2Parser.java +++ b/ChatGPTParsing/src/type2/Type2Parser.java @@ -9,7 +9,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import auxiliary.ListofListContains; +import auxiliary.ListOfListContains; import co_reachable.CoReachability; import reachable.Reachability; @@ -137,7 +137,7 @@ public class Type2Parser { for (List<String> oldConclusio : rule.getValue()) { List<List<String>> newCons = removeNullable(oldConclusio, nullable); for (List<String> newCon : newCons) { - if ((!newCon.isEmpty() && !ListofListContains.contains(newConclusios, newCon))) { + if ((!newCon.isEmpty() && !ListOfListContains.contains(newConclusios, newCon))) { newConclusios.add(newCon); } } @@ -243,7 +243,7 @@ public class Type2Parser { List<List<String>> newConclusios = new LinkedList<>(); for (String s : chainProdMap.get(premise)) { for (List<String> newConclusio : chainRulesDeleted.get(s)) { - if (!ListofListContains.contains(newConclusios, newConclusio)) { + if (!ListOfListContains.contains(newConclusios, newConclusio)) { newConclusios.add(newConclusio); } } @@ -407,7 +407,7 @@ public class Type2Parser { public boolean isPartOfLanguage(Map<String, List<List<String>>> rules, String word, String start) { Map<String, List<List<String>>> cnf = createCNF(rules, start); if (word.isEmpty()) { - return ListofListContains.contains(cnf.get("S'"), new LinkedList<>()); + return ListOfListContains.contains(cnf.get("S'"), new LinkedList<>()); } return cyk(cnf, word, cnf.keySet().contains("S'") ? "S'" : start); } diff --git a/ChatGPTParsing/src/type3/Type3GrammarGenerator.java b/ChatGPTParsing/src/type3/Type3GrammarGenerator.java index 4072002..5dff47d 100644 --- a/ChatGPTParsing/src/type3/Type3GrammarGenerator.java +++ b/ChatGPTParsing/src/type3/Type3GrammarGenerator.java @@ -8,7 +8,7 @@ import java.util.Map; import java.util.Random; import java.util.Set; -import auxiliary.ListofListContains; +import auxiliary.ListOfListContains; import co_reachable.CoReachability; import reachable.Reachability; @@ -16,7 +16,7 @@ public class Type3GrammarGenerator { Random random = new Random(); - public Map<String, List<List<String>>> genType3GrammarRuleSet(String[] vars, int alphaSize, int maxConclusios, + private Map<String, List<List<String>>> genType3GrammarRuleSet(String[] vars, int alphaSize, int maxConclusios, String s) { Map<String, List<List<String>>> rules = new LinkedHashMap<>(); List<List<String>> conclusios0 = genConclusios(alphaSize, vars, maxConclusios, true); @@ -34,10 +34,10 @@ public class Type3GrammarGenerator { conclusios.add(new LinkedList<>()); } int numOfConclusios = random.nextInt(maxConclusios) + 1; - while (conclusios.size() < numOfConclusios || ListofListContains.contains(conclusios, new LinkedList<>()) + while (conclusios.size() < numOfConclusios || ListOfListContains.contains(conclusios, new LinkedList<>()) && conclusios.size() < numOfConclusios + 1) { List<String> conclusio = genConclusio(alphaSize, vars); - if (!ListofListContains.contains(conclusios, conclusio)) { + if (!ListOfListContains.contains(conclusios, conclusio)) { conclusios.add(conclusio); } } diff --git a/ChatGPTParsing/src/type3/Type3Parser.java b/ChatGPTParsing/src/type3/Type3Parser.java index 05a8cf9..aff9d66 100644 --- a/ChatGPTParsing/src/type3/Type3Parser.java +++ b/ChatGPTParsing/src/type3/Type3Parser.java @@ -6,14 +6,14 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import auxiliary.ListofListContains; +import auxiliary.ListOfListContains; public class Type3Parser { private FiniteStateMachine grammarToFSM(Map<String, List<List<String>>> rules, String start) { Map<String, State> states = new HashMap<>(); for (Entry<String, List<List<String>>> entry : rules.entrySet()) { - if (entry.getKey().equals(start) && ListofListContains.contains(entry.getValue(), new LinkedList<>())) { + if (entry.getKey().equals(start) && ListOfListContains.contains(entry.getValue(), new LinkedList<>())) { states.put(start, new State(start, true)); } else { states.put(entry.getKey(), new State(entry.getKey())); diff --git a/ChatGPTParsing/src/writer/.gitignore b/ChatGPTParsing/src/writer/.gitignore new file mode 100644 index 0000000..e90b7dd --- /dev/null +++ b/ChatGPTParsing/src/writer/.gitignore @@ -0,0 +1 @@ +/json.tmp \ No newline at end of file diff --git a/ChatGPTParsing/src/writer/Writer.java b/ChatGPTParsing/src/writer/Writer.java index 7d6d47a..f4cee6a 100644 --- a/ChatGPTParsing/src/writer/Writer.java +++ b/ChatGPTParsing/src/writer/Writer.java @@ -3,20 +3,87 @@ package writer; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; + +import json.GrammarToJSON; +import word_generator.WordGenerator; public class Writer { - public void writeToFile(String json) { + private static final int DISTINCT_WORDS = 5; + private static final int MAX_LENGTH = 5; + + GrammarToJSON jg = new GrammarToJSON(); + WordGenerator wg = new WordGenerator(); + + private List<String> createGrammarWordPairs(String[] vars, int alphaSize, int maxConclusios, int maxConclusioSize, + String start, int type, int mode, int n) { + List<String> grammarWordPairs = new LinkedList<>(); + List<String> jsonGrammars = jg.createJSONGrammars(vars, alphaSize, maxConclusios, maxConclusioSize, start, type, + mode, n); + for (String jsonGrammar : jsonGrammars) { + Set<String> distinctWords = new HashSet<>(); + int i = 0; + while (i < DISTINCT_WORDS) { + String word = wg.wordGenerator(MAX_LENGTH, alphaSize); + if (!distinctWords.contains(word)) { + distinctWords.add(word); + String grammarWordPair = createGrammarWordPair(jsonGrammar, word); + grammarWordPairs.add(grammarWordPair); + i++; + } + } + } + return grammarWordPairs; + } + + private String createGrammarWordPair(String jsonGrammar, String word) { + StringBuilder sb = new StringBuilder(); + sb.append("\"grammar\":"); + sb.append(jsonGrammar); + sb.append(",\"word\":"); + sb.append("\"" + word + "\""); + return sb.toString(); + } + + private void writeToFile(List<String> jsons) { try (BufferedWriter bw = new BufferedWriter(new FileWriter("src/writer/json.tmp"))) { - bw.write(97); + int i = 1; + for (String json : jsons) { + bw.write(json); + bw.newLine(); + bw.newLine(); + if (i != 0 && i % DISTINCT_WORDS == 0) { + bw.newLine(); + } + i++; + } } catch (IOException e) { - + e.printStackTrace(); } } + public void writeToFile(String[] vars, int alphaSize, int maxConclusios, int maxConclusioSize, String start, + int type, int mode, int n) { + List<String> grammarWordPairs = createGrammarWordPairs(vars, alphaSize, maxConclusios, maxConclusioSize, start, + type, mode, n); + writeToFile(grammarWordPairs); + } + public static void main(String[] args) { Writer w = new Writer(); - w.writeToFile(""); + String[] vars = { "S", "A", "B" }; + int alphaSize = 2; + int maxConclusios = 2; + int maxConclusioSize = -1; + String start = "S"; + int type = 3; + int mode = 3; + int n = 3; + w.writeToFile(vars, alphaSize, maxConclusios, maxConclusioSize, start, type, mode, n); } } -- GitLab