001 /* Generated By:JavaCC: Do not edit this line. CharStream.java Version 3.0 */ 002 package org.w3c.flute.parser; 003 004 /** 005 * This interface describes a character stream that maintains line and 006 * column number positions of the characters. It also has the capability 007 * to backup the stream to some extent. An implementation of this 008 * interface is used in the TokenManager implementation generated by 009 * JavaCCParser. 010 * 011 * All the methods except backup can be implemented in any fashion. backup 012 * needs to be implemented correctly for the correct operation of the lexer. 013 * Rest of the methods are all used to get information like line number, 014 * column number and the String that constitutes a token and are not used 015 * by the lexer. Hence their implementation won't affect the generated lexer's 016 * operation. 017 */ 018 019 public interface CharStream { 020 021 /** 022 * Returns the next character from the selected input. The method 023 * of selecting the input is the responsibility of the class 024 * implementing this interface. Can throw any java.io.IOException. 025 */ 026 char readChar() throws java.io.IOException; 027 028 /** 029 * Returns the column position of the character last read. 030 * @deprecated 031 * @see #getEndColumn 032 */ 033 int getColumn(); 034 035 /** 036 * Returns the line number of the character last read. 037 * @deprecated 038 * @see #getEndLine 039 */ 040 int getLine(); 041 042 /** 043 * Returns the column number of the last character for current token (being 044 * matched after the last call to BeginTOken). 045 */ 046 int getEndColumn(); 047 048 /** 049 * Returns the line number of the last character for current token (being 050 * matched after the last call to BeginTOken). 051 */ 052 int getEndLine(); 053 054 /** 055 * Returns the column number of the first character for current token (being 056 * matched after the last call to BeginTOken). 057 */ 058 int getBeginColumn(); 059 060 /** 061 * Returns the line number of the first character for current token (being 062 * matched after the last call to BeginTOken). 063 */ 064 int getBeginLine(); 065 066 /** 067 * Backs up the input stream by amount steps. Lexer calls this method if it 068 * had already read some characters, but could not use them to match a 069 * (longer) token. So, they will be used again as the prefix of the next 070 * token and it is the implemetation's responsibility to do this right. 071 */ 072 void backup(int amount); 073 074 /** 075 * Returns the next character that marks the beginning of the next token. 076 * All characters must remain in the buffer between two successive calls 077 * to this method to implement backup correctly. 078 */ 079 char BeginToken() throws java.io.IOException; 080 081 /** 082 * Returns a string made up of characters from the marked token beginning 083 * to the current buffer position. Implementations have the choice of returning 084 * anything that they want to. For example, for efficiency, one might decide 085 * to just return null, which is a valid implementation. 086 */ 087 String GetImage(); 088 089 /** 090 * Returns an array of characters that make up the suffix of length 'len' for 091 * the currently matched token. This is used to build up the matched string 092 * for use in actions in the case of MORE. A simple and inefficient 093 * implementation of this is as follows : 094 * 095 * { 096 * String t = GetImage(); 097 * return t.substring(t.length() - len, t.length()).toCharArray(); 098 * } 099 */ 100 char[] GetSuffix(int len); 101 102 /** 103 * The lexer calls this function to indicate that it is done with the stream 104 * and hence implementations can free any resources held by this class. 105 * Again, the body of this function can be just empty and it will not 106 * affect the lexer's operation. 107 */ 108 void Done(); 109 110 }