001 // This file is part of AceWiki.
002 // Copyright 2008-2012, AceWiki developers.
003 //
004 // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
005 // Lesser General Public License as published by the Free Software Foundation, either version 3 of
006 // the License, or (at your option) any later version.
007 //
008 // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
009 // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
010 // Lesser General Public License for more details.
011 //
012 // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
013 // not, see http://www.gnu.org/licenses/.
014
015 package ch.uzh.ifi.attempto.base;
016
017 import java.util.List;
018
019 /**
020 * This interface describes an incremental parser capable of predicting the possible next tokens.
021 *
022 * @author Tobias Kuhn
023 */
024 public interface PredictiveParser {
025
026 /**
027 * Adds the token to the end of the token sequence.
028 *
029 * @param token The new token to be added.
030 */
031 public void addToken(String token);
032
033 /**
034 * Adds the tokens to the token list.
035 *
036 * @param tokens The tokens to be added.
037 */
038 public void addTokens(List<String> tokens);
039
040 /**
041 * Removes the last token.
042 */
043 public void removeToken();
044
045 /**
046 * Removes all tokens in the current token sequence.
047 */
048 public void removeAllTokens();
049
050 /**
051 * Sets the given tokens. Existing tokens are removed.
052 *
053 * @param tokens The tokens.
054 */
055 public void setTokens(List<String> tokens);
056
057 /**
058 * Returns the current token sequence.
059 *
060 * @return The current token sequence.
061 */
062 public List<String> getTokens();
063
064 /**
065 * Returns the number of tokens of the current (partial) text.
066 *
067 * @return The number of tokens.
068 */
069 public int getTokenCount();
070
071 /**
072 * This method returns the options for the next token to be added at the end.
073 *
074 * @return The options describing the possible next tokens.
075 */
076 public NextTokenOptions getNextTokenOptions();
077
078 /**
079 * Returns whether the given token is a possible next token.
080 *
081 * @param token The token.
082 * @return true if the token is a possible next token.
083 */
084 public boolean isPossibleNextToken(String token);
085
086 /**
087 * Returns true if the current token sequence is a complete statement.
088 *
089 * @return true if the current token sequence is complete.
090 */
091 public boolean isComplete();
092
093 /**
094 * This method should return the token number to which the last token refers, if it is a
095 * reference like "it". -1 should be returned if the last token is not a reference, or if
096 * reference resolution is not implemented.
097 *
098 * @return The token number to which the last token refers.
099 */
100 public int getReference();
101
102 }