Класс StreamTokenizer

public class StreamTokenizer
extends Object

Класс StreamTokenizer принимает входной поток и разбирает его на «токены», позволяя считывать токены по одному. Процесс разбора контролируется таблицей и рядом флагов, которые можно устанавливать в различные состояния. Токенизатор потока может распознавать идентификаторы, числа, строковые константы в кавычках и различные стили комментариев.

Каждый байт, считанный из входного потока, рассматривается как символ в диапазоне '\u0000' по '\u00FF'. Значение символа используется для поиска пяти возможных атрибутов символа: пробел, буква, цифра, кавычка и символ комментария. Каждый символ может иметь ноль или более из этих атрибутов.

Кроме того, у экземпляра есть четыре флага. Эти флаги указывают:

  • Являются ли разделители строк токенами или рассматриваются как пробелы, просто разделяющие токены.
  • Распознавать ли комментарии в стиле C и пропускать их.
  • Распознавать ли комментарии в стиле C++ и пропускать их.
  • Преобразовывать ли символы идентификаторов в нижний регистр.

Типичное приложение сначала создает экземпляр этого класса, настраивает таблицы синтаксиса, а затем многократно выполняет цикл, вызывая метод nextToken в каждой итерации цикла, пока он не вернёт значение TT_EOF.

С:
1.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

После вызова метода nextToken, это поле содержит тип только что прочитанного токена.

Краткое описание конструкторов

Конструктор Описание
StreamTokenizer​(InputStream is)

Устарело.

Начиная с версии JDK 1.1, предпочтительный способ токенизации входного потока заключается в преобразовании его в поток символов, например:

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 в диапазоне low <= c <= high являются «обычными» в этом токенизаторе.

void parseNumbers()

Указывает, что числа должны разбираться этим токенизатором.

void pushBack()

Принуждает следующий вызов метода nextToken этого токенизатора возвращать текущее значение в поле ttype, а не изменять значение в полях nval или sval.

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 в диапазоне low <= c <= high являются символами пробелов.

void wordChars​(int low, int hi)

Указывает, что все символы c в диапазоне low <= c <= high являются составляющими токенов слов.

Методы, объявленные в классе 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.

См. также:
TT_NUMBER, ttype

Конструкторы

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, предоставляющий поток ввода.
С:
1.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 в значение символа.

Делание символа разделителя строк «обычным» может помешать способности StreamTokenizer подсчитывать строки. Метод 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.

См. также:
nval, TT_NUMBER, ttype

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
Переопределяет:
toString в классе Object
Возвращает:
строковое представление токена
См. также:
nval, sval, ttype

© 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/StreamTokenizer.html

Spec-Zone .ru
спецификации, руководства, описания, API