Класс StreamTokenizer
- java.lang.Object
-
- java.io.StreamTokenizer
public class StreamTokenizer extends Object
Класс StreamTokenizer принимает входной поток и анализирует его на «токены», позволяя читать токены по одному. Процесс анализа контролируется таблицей и рядом флагов, которые могут быть установлены в различных состояниях. Токенизатор может распознавать идентификаторы, числа, строковые литералы и различные стили комментариев.
Каждый байт, считанный из входного потока, рассматривается как символ в диапазоне '\u0000' по '\u00FF'. Значение символа используется для поиска пяти возможных атрибутов символа: пробел, буква, цифра, символ кавычки и символ комментария. Каждый символ может иметь ноль или более из этих атрибутов.
Кроме того, у экземпляра есть четыре флага. Эти флаги указывают:
- Должны ли символы конца строки возвращаться как токены или рассматриваться как пробелы, просто разделяющие токены.
- Должны ли распознаваться и пропускаться комментарии в стиле C.
- Должны ли распознаваться и пропускаться комментарии в стиле C++.
- Должны ли символы идентификаторов преобразовываться в нижний регистр.
Типичное приложение сначала создает экземпляр этого класса, настраивает таблицы синтаксиса, а затем многократно вызывает метод nextToken в каждом цикле итерации, пока он не вернет значение TT_EOF.
- Since:
- JDK1.0
- См. также:
-
nextToken(),TT_EOF
Поля
| Модификатор и тип | Поле и описание |
|---|---|
double |
nval Если текущий токен — число, это поле содержит значение этого числа. |
String |
sval Если текущий токен — токен слова, это поле содержит строку, содержащую символы токена слова. |
static int |
TT_EOF Константа, указывающая, что конец потока был прочитан. |
static int |
TT_EOL Константа, указывающая, что конец строки был прочитан. |
static int |
TT_NUMBER Константа, указывающая, что был прочитан токен числа. |
static int |
TT_WORD Константа, указывающая, что был прочитан токен слова. |
int |
ttype После вызова метода |
Конструкторы
| Конструктор и описание |
|---|
StreamTokenizer(InputStream is) Устарело. Начиная с JDK версии 1.1, предпочтительный способ токенизации входного потока — преобразование его в поток символов, например: Reader r = new BufferedReader(new InputStreamReader(is)); StreamTokenizer st = new StreamTokenizer(r); |
StreamTokenizer(Reader r) Создает токенизатор, который анализирует указанный поток символов. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
void |
commentChar(int ch) Устанавливает, что символ-аргумент начинается однострочный комментарий. |
void |
eolIsSignificant(boolean flag) Определяет, обрабатываются ли концы строк как токены. |
int |
lineno() Возвращает текущий номер строки. |
void |
lowerCaseMode(boolean fl) Определяет, преобразуются ли токены слов в нижний регистр автоматически. |
int |
nextToken() Анализирует следующий токен из входного потока этого токенизатора. |
void |
ordinaryChar(int ch) Устанавливает, что символ-аргумент является «обычным» в этом токенизаторе. |
void |
ordinaryChars(int low,
int hi) Устанавливает, что все символы c в диапазоне |
void |
parseNumbers() Устанавливает, что числа должны анализироваться этим токенизатором. |
void |
pushBack() Заставляет следующий вызов метода |
void |
quoteChar(int ch) Устанавливает, что парные символы этого аргумента определяют строковые константы в этом токенизаторе. |
void |
resetSyntax() Сбрасывает таблицу синтаксиса этого токенизатора так, что все символы являются «обычными». См. метод |
void |
slashSlashComments(boolean flag) Определяет, распознает ли токенизатор комментарии в стиле C++. |
void |
slashStarComments(boolean flag) Определяет, распознает ли токенизатор комментарии в стиле C. |
String |
toString() Возвращает строковое представление текущего токена потока и номера строки, на котором он встречается. |
void |
whitespaceChars(int low,
int hi) Устанавливает, что все символы c в диапазоне |
void |
wordChars(int low,
int hi) Устанавливает, что все символы c в диапазоне |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait Поля
ttype
public int ttype
После вызова метода nextToken, это поле содержит тип только что прочитанного токена. Для токена одного символа его значением является сам символ, преобразованный в целое число. Для токена строковой константы в кавычках его значением является символ кавычек. В противном случае его значением является одно из следующих:
-
TT_WORDуказывает, что токен является словом. -
TT_NUMBERуказывает, что токен является числом. -
TT_EOLуказывает, что прочитан конец строки. Это значение поле может иметь только если методeolIsSignificantбыл вызван со значением аргументаtrue. -
TT_EOFуказывает, что достигнут конец входного потока.
Начальное значение этого поля равно -4.
- См. также:
-
eolIsSignificant(boolean),nextToken(),quoteChar(int),TT_EOF,TT_EOL,TT_NUMBER,TT_WORD
TT_EOF
public static final int TT_EOF
Постоянная, указывающая, что был прочитан конец потока.
- См. также:
- Значения постоянных полей
TT_EOL
public static final int TT_EOL
Постоянная, указывающая, что был прочитан конец строки.
- См. также:
- Значения постоянных полей
TT_NUMBER
public static final int TT_NUMBER
Постоянная, указывающая, что был прочитан токен числа.
- См. также:
- Значения постоянных полей
TT_WORD
public static final int TT_WORD
Постоянная, указывающая, что был прочитан токен слова.
- См. также:
- Значения постоянных полей
sval
public String sval
Если текущий токен является токеном слова, это поле содержит строку, содержащую символы токена слова. Когда текущий токен является токеном строковой константы в кавычках, это поле содержит тело строки.
Текущий токен является токеном слова, когда значение поля ttype равно TT_WORD. Текущий токен является токеном строковой константы в кавычках, когда значение поля ttype является символом кавычек.
Начальное значение этого поля равно null.
- См. также:
-
quoteChar(int),TT_WORD,ttype
nval
public double nval
Если текущий токен является числом, это поле содержит значение этого числа. Текущий токен является числом, когда значение поля ttype равно TT_NUMBER.
Начальное значение этого поля равно 0.0.
Конструкторы
StreamTokenizer
@Deprecated public StreamTokenizer(InputStream is)
Устарело. Начиная с версии JDK 1.1, предпочтительный способ токенизации входного потока заключается в преобразовании его в поток символов, например:
Reader r = new BufferedReader(new InputStreamReader(is)); StreamTokenizer st = new StreamTokenizer(r);
Создаёт токенизатор потока, который анализирует указанный входной поток. Токенизатор потока инициализируется в следующем состоянии по умолчанию:
- Все байтовые значения
'A'по'Z','a'по'z', и'\u00A0'по'\u00FF'считаются алфавитными. - Все байтовые значения
'\u0000'по'\u0020'считаются пробельными. -
'/'является символом комментария. - Одинарная кавычка
'\''и двойная кавычка'"'являются символами кавычек для строк. - Числа анализируются.
- Концы строк обрабатываются как пробельные символы, а не как отдельные токены.
- Комментарии в стиле C и C++ не распознаются.
- Параметры:
-
is- входной поток. - См. также:
-
BufferedReader,InputStreamReader,StreamTokenizer(java.io.Reader)
StreamTokenizer
public StreamTokenizer(Reader r)
Создаёт токенизатор, анализирующий указанный поток символов.
- Параметры:
-
r- объект Reader, предоставляющий входной поток. - С:
- JDK1.1
Методы
resetSyntax
public void resetSyntax()
Сбрасывает таблицу синтаксиса этого токенизатора, так что все символы становятся "обычными". См. метод ordinaryChar для получения дополнительной информации о том, что символ является обычным.
- См. также:
ordinaryChar(int)
wordChars
public void wordChars(int low,
int hi) Устанавливает, что все символы c в диапазоне low <= c <= high являются составляющими слов. Токен слова состоит из составляющей слова, за которой следуют ноль или более составляющих слова или числовых составляющих.
- Параметры:
-
low- нижняя граница диапазона. -
hi- верхняя граница диапазона.
whitespaceChars
public void whitespaceChars(int low,
int hi) Устанавливает, что все символы c в диапазоне low <= c <= high являются пробельными символами. Пробельные символы служат только для разделения токенов во входном потоке.
Любые другие настройки атрибутов для символов в указанном диапазоне сбрасываются.
- Параметры:
-
low- нижняя граница диапазона. -
hi- верхняя граница диапазона.
ordinaryChars
public void ordinaryChars(int low,
int hi) Устанавливает, что все символы c в диапазоне low <= c <= high являются "обычными" в этом токенизаторе. См. метод ordinaryChar для получения дополнительной информации о том, что символ является обычным.
- Параметры:
-
low- нижняя граница диапазона. -
hi- верхняя граница диапазона. - См. также:
ordinaryChar(int)
ordinaryChar
public void ordinaryChar(int ch)
Устанавливает, что переданный символ является "обычным" в этом токенизаторе. Он удаляет любое специальное значение, которое символ имеет как символ комментария, составляющая слова, разделитель строк, пробельный символ или числовой символ. Когда анализатор встречает такой символ, он обрабатывает его как токен одного символа и устанавливает значение поля ttype в значение символа.
Преобразование символа разделителя строк в "обычный" может помешать подсчету строк токенизатором. Метод lineno может больше не отражать наличие таких символов разделителей строк в своём счетчике строк.
- Параметры:
-
ch- символ. - См. также:
ttype
commentChar
public void commentChar(int ch)
Указывает, что переданный символ начинает однострочный комментарий. Все символы от символа комментария до конца строки игнорируются этим токенизатором потока.
Любые другие настройки атрибутов для указанного символа сбрасываются.
- Параметры:
-
ch- символ.
quoteChar
public void quoteChar(int ch)
Указывает, что соответствующие пары этого символа ограничивают строковые константы в этом токенизаторе.
Когда метод nextToken встречает строковую константу, поле ttype устанавливается в разделитель строк, а поле sval устанавливается в тело строки.
Если встречается символ кавычек для строк, то распознаётся строка, состоящая из всех символов после (но не включая) символа кавычек для строк, до (но не включая) следующего вхождения того же символа кавычек для строк, или разделителя строк, или конца файла. Обычные escape-последовательности, такие как "\n" и "\t" распознаются и преобразуются в отдельные символы при анализе строки.
Любые другие настройки атрибутов для указанного символа сбрасываются.
- Параметры:
-
ch- символ. - См. также:
-
nextToken(),sval,ttype
parseNumbers
public void parseNumbers()
Указывает, что числа должны анализироваться этим токенизатором. Таблица синтаксиса этого токенизатора модифицируется так, что каждый из двенадцати символов:
0 1 2 3 4 5 6 7 8 9 . -
имеет атрибут "числовой".
Когда анализатор встречает токен слова, имеющий формат числа двойной точности с плавающей запятой, он обрабатывает токен как число, а не как слово, устанавливая поле ttype в значение TT_NUMBER и помещая числовое значение токена в поле nval.
eolIsSignificant
public void eolIsSignificant(boolean flag)
Определяет, обрабатываются ли концы строк как токены. Если флаг аргумента имеет значение true, этот токенизатор обрабатывает концы строк как токены; метод nextToken возвращает TT_EOL и также устанавливает поле ttype в это значение, когда считывается конец строки.
Строка - это последовательность символов, заканчивающаяся либо символом возврата каретки ('\r') или символом новой строки ('\n'). Кроме того, символ возврата каретки, немедленно за которым следует символ новой строки, обрабатывается как единственный токен конца строки.
Если flag имеет значение false, символы конца строки обрабатываются как пробельные символы и служат только для разделения токенов.
- Параметры:
-
flag-trueуказывает, что символы конца строки являются отдельными маркерами;falseуказывает, что символы конца строки являются пробелами. - См. также:
-
nextToken(),ttype,TT_EOL
slashStarComments
public void slashStarComments(boolean flag)
Определяет, распознает ли токенизатор комментарии в стиле C. Если флаг аргумента равен true, этот токенизатор потока распознает комментарии в стиле C. Весь текст между последовательными появлениями /* и */ игнорируется.
Если флаг аргумента равен false, комментарии в стиле C не обрабатываются особым образом.
- Параметры:
-
flag-trueуказывает распознавать и игнорировать комментарии в стиле C.
slashSlashComments
public void slashSlashComments(boolean flag)
Определяет, распознает ли токенизатор комментарии в стиле C++. Если флаг аргумента равен true, этот токенизатор потока распознает комментарии в стиле C++. Любое появление двух последовательных косых черт ('/') интерпретируется как начало комментария, который продолжается до конца строки.
Если флаг аргумента равен false, комментарии в стиле C++ не обрабатываются особым образом.
- Параметры:
-
flag-trueуказывает распознавать и игнорировать комментарии в стиле C++.
lowerCaseMode
public void lowerCaseMode(boolean fl)
Определяет, приводятся ли автоматически к нижнему регистру лексемы слов. Если флаг аргумента равен true, то значение в поле sval приводится к нижнему регистру всякий раз, когда возвращается лексема слова (поле ttype имеет значение TT_WORD методом nextToken этого токенизатора.
Если флаг аргумента равен false, то поле sval не изменяется.
- Параметры:
-
fl-trueуказывает, что все лексемы слов должны быть приведены к нижнему регистру. - См. также:
-
nextToken(),ttype,TT_WORD
nextToken
public int nextToken()
throws IOException Парсит следующую лексему из входного потока этого токенизатора. Тип следующей лексемы возвращается в поле ttype. Дополнительная информация о лексеме может находиться в поле nval или поле sval этого токенизатора.
Типичные клиенты этого класса сначала устанавливают таблицы синтаксиса, а затем находятся в цикле, вызывая nextToken для парсинга последовательных лексем, пока не будет возвращено TT_EOF.
- Возвращает:
- значение поля
ttype. - Исключения:
-
IOException- если произошла ошибка ввода-вывода. - См. также:
-
nval,sval,ttype
pushBack
public void pushBack()
Принуждает следующий вызов метода nextToken этого токенизатора вернуть текущее значение в поле ttype, а не изменять значение в полях nval или sval.
- См. также:
-
nextToken(),nval,sval,ttype
lineno
public int lineno()
Возвращает текущий номер строки.
- Возвращает:
- текущий номер строки этого токенизатора потока.
toString
public String toString()
Возвращает строковое представление текущего токена потока и номера строки, в котором он встречается.
Точная возвращаемая строка не определена, хотя следующий пример можно считать типичным:
Token['a'], line 10
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.