Initial
This commit is contained in:
66
src/com/bayviewglen/zork/Parser.java
Normal file
66
src/com/bayviewglen/zork/Parser.java
Normal file
@@ -0,0 +1,66 @@
|
||||
|
||||
package com.bayviewglen.zork;
|
||||
|
||||
/*
|
||||
* Author: Michael Kolling
|
||||
* Version: 1.0
|
||||
* Date: July 1999
|
||||
*
|
||||
* This class is part of Zork. Zork is a simple, text based adventure game.
|
||||
*
|
||||
* This parser reads user input and tries to interpret it as a "Zork"
|
||||
* command. Every time it is called it reads a line from the terminal and
|
||||
* tries to interpret the line as a two word command. It returns the command
|
||||
* as an object of class Command.
|
||||
*
|
||||
* The parser has a set of known command words. It checks user input against
|
||||
* the known commands, and if the input is not one of the known commands, it
|
||||
* returns a command object that is marked as an unknown command.
|
||||
*/
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
class Parser {
|
||||
private CommandWords commands; // holds all valid command words
|
||||
|
||||
public Parser() {
|
||||
commands = new CommandWords();
|
||||
}
|
||||
|
||||
public Command getCommand() {
|
||||
String inputLine = ""; // will hold the full input line
|
||||
String word1;
|
||||
String word2;
|
||||
System.out.print("> "); // print prompt
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
|
||||
try {
|
||||
inputLine = reader.readLine();
|
||||
} catch (java.io.IOException exc) {
|
||||
System.out.println("There was an error during reading: " + exc.getMessage());
|
||||
}
|
||||
StringTokenizer tokenizer = new StringTokenizer(inputLine);
|
||||
if (tokenizer.hasMoreTokens())
|
||||
word1 = tokenizer.nextToken(); // get first word
|
||||
else
|
||||
word1 = null;
|
||||
if (tokenizer.hasMoreTokens())
|
||||
word2 = tokenizer.nextToken(); // get second word
|
||||
else
|
||||
word2 = null;
|
||||
// note: we just ignore the rest of the input line.
|
||||
// Now check whether this word is known. If so, create a command
|
||||
// with it. If not, create a "nil" command (for unknown command).
|
||||
if (commands.isCommand(word1))
|
||||
return new Command(word1, word2);
|
||||
else
|
||||
return new Command(null, word2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print out a list of valid command words.
|
||||
*/
|
||||
public void showCommands() {
|
||||
commands.showAll();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user