summaryrefslogtreecommitdiff
path: root/RGens/src/main/java/bjc/rgens/server/GrammarServerEngine.java
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2017-03-25 14:06:13 -0400
committerbculkin2442 <bjculkin@mix.wvu.edu>2017-03-25 14:06:13 -0400
commit3cb61c2aede328e2c302f8cfd030478727fca66c (patch)
tree11465e2264325338cfc65ccdc09e142c60324d2a /RGens/src/main/java/bjc/rgens/server/GrammarServerEngine.java
parent2f84d6ae03819960e6adeb6f8d1638470a4f3452 (diff)
General cleanup
Removes the old grammar stuff.
Diffstat (limited to 'RGens/src/main/java/bjc/rgens/server/GrammarServerEngine.java')
-rw-r--r--RGens/src/main/java/bjc/rgens/server/GrammarServerEngine.java300
1 files changed, 0 insertions, 300 deletions
diff --git a/RGens/src/main/java/bjc/rgens/server/GrammarServerEngine.java b/RGens/src/main/java/bjc/rgens/server/GrammarServerEngine.java
deleted file mode 100644
index 2f608ec..0000000
--- a/RGens/src/main/java/bjc/rgens/server/GrammarServerEngine.java
+++ /dev/null
@@ -1,300 +0,0 @@
-package bjc.rgens.server;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.LinkedList;
-import java.util.Queue;
-import java.util.Scanner;
-
-import bjc.utils.funcdata.FunctionalList;
-import bjc.utils.funcdata.IList;
-import bjc.utils.funcdata.IMap;
-import bjc.utils.funcutils.ListUtils;
-import bjc.utils.gen.WeightedGrammar;
-
-public class GrammarServerEngine {
- private IMap<String, WeightedGrammar<String>> loadedGrammars;
- private IMap<String, WeightedGrammar<String>> exportedRules;
-
- public static boolean debugMode = false;
-
- public GrammarServerEngine(IMap<String, WeightedGrammar<String>> loadedGrammars,
- IMap<String, WeightedGrammar<String>> exportedRules) {
- this.loadedGrammars = loadedGrammars;
- this.exportedRules = exportedRules;
- }
-
- public String getInitialRule(String grammarName) {
- return loadedGrammars.get(grammarName).getInitialRule();
- }
-
- public boolean hasInitialRule(String grammarName) {
- return loadedGrammars.get(grammarName).hasInitialRule();
- }
-
- public boolean hasExportedRule(String ruleName) {
- return exportedRules.containsKey(ruleName);
- }
-
- public boolean hasLoadedGrammar(String grammarName) {
- return loadedGrammars.containsKey(grammarName);
- }
-
- public void doLoadConfig(String fileName) {
- File inputFile = new File(fileName);
-
- try(FileInputStream inputStream = new FileInputStream(inputFile)) {
- try(Scanner fle = new Scanner(inputStream)) {
- while(fle.hasNextLine()) {
- String line = fle.nextLine().trim();
-
- // Handle comments
- if(line.equals("") ||
- line.startsWith("#") ||
- line.startsWith("//")) {
- continue;
- }
-
- // Handle mixed whitespace in input
- line = line.replaceAll("\\s+", " ");
-
- String path;
- String name;
-
- if(line.lastIndexOf(' ') != -1) {
- path = line.substring(0, line.lastIndexOf(' '));
- name = line.substring(line.lastIndexOf(' ') + 1, line.length());
- } else {
- path = line;
-
- File pathFile = new File(path);
- String pathName = pathFile.getName();
-
- if(pathFile.isDirectory()) {
- // Load all the files in the directory recursively
- Queue<File> entries = new LinkedList<>();
-
- for (File entry : pathFile.listFiles()) {
- entries.add(entry);
- }
-
- while(!entries.isEmpty()) {
- File entry = entries.poll();
-
- String entryPath = entry.getName();
-
- if(entry.isHidden()) continue;
- if(entry.isDirectory()) {
- for (File newEntry : entry.listFiles()) {
- entries.add(newEntry);
- }
-
- continue;
- }
-
- name = entryPath.substring(0, entryPath.lastIndexOf('.'));
-
- doLoadGrammarEntry(entry.toString(), name);
- }
-
- continue;
- }
-
- name = pathName.substring(0, pathName.lastIndexOf('.'));
- }
-
- doLoadGrammarEntry(path, name);
- }
- }
- } catch(IOException ioex) {
- System.out.printf("? Error reading configuration from file"
- + " (reason: %s)\n", ioex.getMessage());
- }
- }
-
- private void doLoadGrammarEntry(String path, String name) {
- if(path.endsWith(".gram")) {
- doLoadGrammar(name, path);
- } else if(path.endsWith(".template")) {
- System.out.println("Error: Templates are not supported yet");
- } else if(path.endsWith(".long")) {
- doLoadLongRule(name, path);
- } else {
- System.out.println("Error: Unknown filetype " +
- path.substring(path.lastIndexOf("."), path.length()));
- }
- }
-
- public void doLoadLongRule(String ruleName, String ruleFile) {
- ruleName = "[" + ruleName + "]";
-
- if(debugMode) {
- System.out.printf("Loading long rule (named %s) from path %s\n",
- ruleName, ruleFile);
- }
-
- try (FileInputStream inputStream = new FileInputStream(ruleFile)) {
- try (Scanner fle = new Scanner(inputStream)) {
- IList<IList<String>> ruleParts = new FunctionalList<>();
-
- while(fle.hasNextLine()) {
- ruleParts.add(new FunctionalList<>(fle.nextLine().trim().split(" ")));
- }
-
- WeightedGrammar<String> longGram = new WeightedGrammar<>();
-
- longGram.addSpecialRule(ruleName, () -> ruleParts.randItem());
- longGram.setInitialRule(ruleName);
-
- exportedRules.put(ruleName, longGram);
-
- if(debugMode) {
- System.out.printf("Loaded long rule (named %s) from path %s\n",
- ruleName, ruleFile);
- }
- }
- } catch (IOException ioex) {
- System.out.printf("Error reading long rule (%s)\n", ioex.getMessage());
- }
- }
-
- public void doLoadGrammar(String grammarName, String grammarPath) {
- if(debugMode) {
- System.out.printf("Loading grammar (named %s) from path %s\n",
- grammarName, grammarPath);
- }
-
- try (FileInputStream inputStream = new FileInputStream(grammarPath)) {
- WeightedGrammar<String> newGram =
- ServerGrammarReader.fromStream(inputStream).merge((gram, exports) -> {
- for(String export : exports.toIterable()) {
- if(debugMode) {
- System.out.printf("\tLoaded exported rule %s from grammar %s\n",
- export, grammarName);
-
- if(exportedRules.containsKey(export)) {
- System.out.printf("\tWarning: Exported rule %s from grammar %s" +
- " shadows a pre-existing rule\n", export, grammarName);
- }
- }
-
- exportedRules.put(export, gram);
- }
-
- return gram;
- });
-
- loadedGrammars.put(grammarName, newGram);
- } catch (IOException ioex) {
- System.out.printf("? Error reading grammar from file"
- + " (reason: %s)\n", ioex.getMessage());
- }
-
- if(debugMode) {
- System.out.printf("Loaded grammar (named %s) from path %s\n",
- grammarName, grammarPath);
- }
- }
-
- public void doGenerateExportedRule(String ruleName) {
- String ruleResult = ListUtils.collapseTokens(
- exportedRules.get(ruleName)
- .generateListValues(ruleName, " "));
-
- System.out.println("Generated Result: ");
- System.out.println("\t" + ruleResult.replaceAll("\\s+", " "));
- }
-
- public void doGenerateGrammar(String currentGram, String ruleName) {
- doGenerateGrammar(loadedGrammars.get(currentGram), ruleName);
- }
-
- public void doGenerateGrammar(WeightedGrammar<String> currentGram, String ruleName) {
- String ruleResult = ListUtils.collapseTokens(
- currentGram.generateListValues(ruleName, " "));
-
- System.out.println("Generated Result: ");
- System.out.println("\t" + ruleResult.replaceAll("\\s+", " "));
- }
-
- public void doShowExportedRules() {
- System.out.printf("Currently exported rules (%d total):\n",
- exportedRules.getSize());
-
- exportedRules.forEachKey(key -> {
- System.out.println("\t" + key);
- });
- }
-
- public void doShowGrammarRules(String gramName) {
- WeightedGrammar<String> gram = loadedGrammars.get(gramName);
-
- IList<String> ruleNames = gram.getRuleNames();
-
- System.out.printf("Rules for grammar %s (%d total)\n",
- gramName, ruleNames.getSize());
-
- ruleNames.forEach(rule -> {
- System.out.println("\t" + rule);
- });
- }
-
- public void doShowLoadedGrammars() {
- System.out.printf("Currently loaded grammars (%d total):\n",
- loadedGrammars.getSize());
-
- loadedGrammars.forEachKey(key -> {
- System.out.println("\t" + key);
- });
- }
-
- public void doStressTest(int count) {
- exportedRules.forEachKey(key -> {
- doStressTest(key, count);
- });
- }
-
- public void doStressTest(String ruleName, int count) {
- doStressTest(exportedRules.get(ruleName), ruleName, count);
- }
-
- public void doStressTest(WeightedGrammar<String> gram, String ruleName, int count) {
- if(debugMode) System.out.println("Stress-testing rule " + ruleName);
-
- IList<String> res = new FunctionalList<>();
- IList<String> foundTags = new FunctionalList<>();
-
- boolean foundBroken = false;
-
- for(int i = 0; i < count; i++) {
- res = gram.generateListValues(ruleName, " ");
-
- for(String tok : res.toIterable()) {
- if(tok.matches("\\[\\S+\\]") && !foundTags.contains(tok)) {
- System.out.println("\tWarning: Possible un-expanded rule " + tok + " found"
- + " in expansion of " + ruleName);
-
- doFindRule(tok);
-
- foundBroken = true;
-
- foundTags.add(tok);
- }
- }
- }
-
- if(debugMode) {
- if(!foundBroken) System.out.printf("Rule %s succesfully passed stress-testing\n", ruleName);
- else System.out.printf("Rule %s failed stress-testing\n", ruleName);
- }
- }
-
- private void doFindRule(String ruleName) {
- loadedGrammars.forEach((gramName, gram) -> {
- if(gram.hasRule(ruleName)) {
- System.out.printf("\t\tFound rule %s in grammar %s\n", ruleName, gramName);
- }
- });
- }
-}