64 lines
2.4 KiB
Java
64 lines
2.4 KiB
Java
|
// Stuart Reges
|
||
|
// 3/10/04
|
||
|
//
|
||
|
// GrammarMain contains a main program that prompts a user for the name of a
|
||
|
// grammar file and then gives the user the opportunity to generate random
|
||
|
// versions of various elements of the grammar.
|
||
|
|
||
|
import java.io.*;
|
||
|
import java.util.*;
|
||
|
|
||
|
public class GrammarMain {
|
||
|
public static void main(String[] args) throws FileNotFoundException {
|
||
|
Scanner console = new Scanner(System.in);
|
||
|
System.out.println("Welcome to the cs145 random sentence generator.");
|
||
|
System.out.println();
|
||
|
|
||
|
// open grammar file
|
||
|
System.out.print("What is the name of the grammar file? ");
|
||
|
String fileName = console.nextLine();
|
||
|
Scanner input = new Scanner(new File(fileName));
|
||
|
|
||
|
// read the grammar file and construct the grammar solver
|
||
|
List<String> grammar = new ArrayList<String>();
|
||
|
while (input.hasNextLine())
|
||
|
grammar.add(input.nextLine());
|
||
|
GrammarSolver solver =
|
||
|
new GrammarSolver(Collections.unmodifiableList(grammar));
|
||
|
|
||
|
showResults(console, solver);
|
||
|
}
|
||
|
|
||
|
// pre : console open for console reading, solver initialized
|
||
|
// post: allows the user to repeatedly pick a grammar element to generate
|
||
|
public static void showResults(Scanner console, GrammarSolver solver) {
|
||
|
for(;;) {
|
||
|
System.out.println();
|
||
|
System.out.println("Available symbols to generate are:");
|
||
|
System.out.println(solver.getSymbols());
|
||
|
System.out.print("What do you want generated (return to quit)? ");
|
||
|
String target = console.nextLine();
|
||
|
if (target.length() == 0)
|
||
|
break;
|
||
|
if (!solver.grammarContains(target))
|
||
|
System.out.println("Illegal symbol");
|
||
|
else {
|
||
|
System.out.print("How many do you want me to generate? ");
|
||
|
if (!console.hasNextInt())
|
||
|
System.out.println("that's not an integer");
|
||
|
else {
|
||
|
int number = console.nextInt();
|
||
|
if (number < 0)
|
||
|
System.out.println("no negatives allowed");
|
||
|
else {
|
||
|
String[] answers = solver.generate(target, number);
|
||
|
for (int i = 0; i < number; i++)
|
||
|
System.out.println(answers[i]);
|
||
|
}
|
||
|
}
|
||
|
console.nextLine(); // to position to next line
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|