content: // This file is part of AceWiki.
  // Copyright 2008-2013, AceWiki developers.
  // 
  // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
  // Lesser General Public License as published by the Free Software Foundation, either version 3 of
  // the License, or (at your option) any later version.
  // 
  // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
  // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  // Lesser General Public License for more details.
  // 
  // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
  // not, see http://www.gnu.org/licenses/.
  
  package ch.uzh.ifi.attempto.base;
  
  import java.util.List;
  
  /**
   * This interface describes an incremental parser capable of predicting the possible next tokens.
   * 
   * @author Tobias Kuhn
   */
  public interface PredictiveParser {
  
  	/**
  	 * Adds the token to the end of the token sequence.
  	 * 
  	 * @param token The new token to be added.
  	 */
  	public void addToken(String token);
  
  	/**
  	 * Adds the tokens to the token list.
  	 * 
  	 * @param tokens The tokens to be added.
  	 */
  	public void addTokens(List<String> tokens);
  
  	/**
  	 * Removes the last token.
  	 */
  	public void removeToken();
  
  	/**
  	 * Removes all tokens in the current token sequence.
  	 */
  	public void removeAllTokens();
  
  	/**
  	 * Sets the given tokens. Existing tokens are removed.
  	 * 
  	 * @param tokens The tokens.
  	 */
  	public void setTokens(List<String> tokens);
  
  	/**
  	 * Returns the current token sequence.
  	 * 
  	 * @return The current token sequence.
  	 */
  	public List<String> getTokens();
  
  	/**
  	 * Returns the number of tokens of the current (partial) text.
  	 * 
  	 * @return The number of tokens.
  	 */
  	public int getTokenCount();
  
  	/**
  	 * This method returns the options for the next token to be added at the end.
  	 * 
  	 * @return The options describing the possible next tokens.
  	 */
  	public NextTokenOptions getNextTokenOptions();
  
  	/**
  	 * Returns whether the given token is a possible next token.
  	 * 
  	 * @param token The token.
  	 * @return true if the token is a possible next token.
  	 */
  	public boolean isPossibleNextToken(String token);
  
  	/**
  	 * Returns true if the current token sequence is a complete statement.
  	 * 
  	 * @return true if the current token sequence is complete.
  	 */
  	public boolean isComplete();
  	
  	/**
  	 * This method should return the token number to which the last token refers, if it is a
  	 * reference like "it". -1 should be returned if the last token is not a reference, or if
  	 * reference resolution is not implemented.
  	 * 
  	 * @return The token number to which the last token refers.
  	 */
  	public int getReference();
  
  }
  