All Downloads are FREE. Search and download functionalities are using the official Maven repository.

aima.core.logic.common.Lexer Maven / Gradle / Ivy

Go to download

AIMA-Java Core Algorithms from the book Artificial Intelligence a Modern Approach 3rd Ed.

There is a newer version: 3.0.0
Show newest version
package aima.core.logic.common;

import java.io.Reader;
import java.io.StringReader;

/**
 * @author Ravi Mohan
 * @author Mike Stampone
 */
public abstract class Lexer {
	protected abstract Token nextToken();

	protected Reader input;

	protected int lookAhead = 1;

	protected int[] lookAheadBuffer;

	/**
	 * Sets the character stream of the lexical analyzer.
	 * 
	 * @param inputString
	 *            a sequence of characters to be converted into a sequence of
	 *            tokens.
	 */
	public void setInput(String inputString) {
		lookAheadBuffer = new int[lookAhead];
		this.input = new StringReader(inputString);
		fillLookAheadBuffer();
	}

	/**
	 * Sets the character stream and look ahead buffer to null.
	 */
	public void clear() {
		this.input = null;
		lookAheadBuffer = null;
	}

	/*
	 * Stores the next character in the lookahead buffer to make parsing action
	 * decisions.
	 */
	protected void fillLookAheadBuffer() {
		try {
			lookAheadBuffer[0] = (char) input.read();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	/*
	 * Returns the character at the specified position in the lookahead buffer.
	 */
	protected char lookAhead(int position) {
		return (char) lookAheadBuffer[position - 1];
	}

	/*
	 * Returns true if the end of the stream has been reached.
	 */
	protected boolean isEndOfFile(int i) {
		return (-1 == i);
	}

	/*
	 * Loads the next character into the lookahead buffer if the end of the
	 * stream has not already been reached.
	 */
	protected void loadNextCharacterFromInput() {

		boolean eofEncountered = false;
		for (int i = 0; i < lookAhead - 1; i++) {

			lookAheadBuffer[i] = lookAheadBuffer[i + 1];
			if (isEndOfFile(lookAheadBuffer[i])) {
				eofEncountered = true;
				break;
			}
		}
		if (!eofEncountered) {
			try {
				lookAheadBuffer[lookAhead - 1] = input.read();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

	}

	protected void consume() {
		loadNextCharacterFromInput();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy