66 lines
1.5 KiB
Java
Executable File
66 lines
1.5 KiB
Java
Executable File
import java.util.Scanner;
|
|
|
|
/**
|
|
* A class that reads input lines from the user.
|
|
* Input is filtered via getCommand for valid commands.
|
|
*
|
|
* @author David J. Barnes and Michael Kölling.
|
|
* @version 2016.02.29
|
|
*/
|
|
public class Parser
|
|
{
|
|
// Hold all valid command words.
|
|
private CommandWords commands;
|
|
private Scanner reader;
|
|
|
|
public Parser()
|
|
{
|
|
commands = new CommandWords();
|
|
reader = new Scanner(System.in);
|
|
}
|
|
|
|
/**
|
|
* Read the next command from the user.
|
|
* The returned command will be valid.
|
|
* @return A valid command.
|
|
*/
|
|
public String getCommand()
|
|
{
|
|
String command = null;
|
|
do {
|
|
// Print a prompt.
|
|
System.out.print("> ");
|
|
|
|
String word = reader.next();
|
|
// Discard the rest of the line.
|
|
readLine();
|
|
if(commands.isCommand(word)) {
|
|
command = word;
|
|
}
|
|
else{
|
|
System.out.println("Unrecognized command: " + word);
|
|
System.out.print("Valid commands are: ");
|
|
commands.showAll();
|
|
}
|
|
} while(command == null);
|
|
|
|
return command;
|
|
}
|
|
|
|
/**
|
|
* Print out a list of valid command words.
|
|
*/
|
|
public void showCommands()
|
|
{
|
|
commands.showAll();
|
|
}
|
|
|
|
/**
|
|
* @return A line of text from the user.
|
|
*/
|
|
public String readLine()
|
|
{
|
|
return reader.nextLine();
|
|
}
|
|
}
|