StreamTokenizer
クラスは、入力ストリームを引数に取り、それを「トークン」に構文解析し、一度に1つのトークンを読めるようにします。 構文解析処理は、さまざまな状態に設定可能ないくつかのフラグと1つの表によって制御されます。 ストリーム・トークナイザは、識別子、数値、引用文字列、および各種のコメント・スタイルを認識できます。
入力ストリームから読み込まれる各バイトは、'\u0000'
から'\u00FF'
の範囲の文字とみなされます。 この文字値を使って、文字の5つの属性、つまり、空白、英字、数値、引用文字列、およびコメント文字を検索します。 各文字は、これらの属性を持たないことも、複数持つこともできます。
さらに、インスタンスには4つのフラグがあります。 これらのフラグが示す内容は次のとおりです。
- 行末記号を、トークンとして返すか、またはトークンを区切るだけの空白文字として扱うかを示す。
- Cスタイルのコメントを認識してスキップするかどうかを示す。
- C++スタイルのコメントを認識してスキップするかどうかを示す。
- 識別子の文字を小文字に変換するかどうかを示す。
一般的なアプリケーションは、最初にこのクラスのインスタンスを生成してから、構文表を設定し、そのあとでループの各反復内でnextToken
メソッドを呼び出して、値TT_EOF
が返されるまでこのループを繰り返します。
- 導入されたバージョン:
- 1.0
- 関連項目:
-
フィールドのサマリー
フィールド修飾子と型フィールド説明double
現在のトークンが数値の場合、このフィールドにはその数値が入ります。現在のトークンがワード・トークンの場合、このフィールドには、ワード・トークンの文字を表す文字列が入ります。static final int
ストリームの終わりが読み込まれたことを示す定数です。static final int
行の終わりが読み込まれたことを示す定数です。static final int
数値トークンが読み込まれたことを示す定数です。static final int
ワード・トークンが読み込まれたことを示す定数です。int
nextToken
メソッドの呼出しのあと、このフィールドには読み込まれたばかりのトークンの型が入ります。 -
コンストラクタのサマリー
コンストラクタコンストラクタ説明非推奨。JDK Version 1.1以降、入力ストリームをトークン化するには、次のようにして入力ストリームを文字ストリームに変換することが推奨されています。指定された文字ストリームを構文解析するトークナイザを作成します。 -
メソッドのサマリー
修飾子と型メソッド説明void
commentChar
(int ch) 文字引数が単一行コメントを開始することを指定します。void
eolIsSignificant
(boolean flag) 行の終わりをトークンとして処理するかどうかを判別します。int
lineno()
現在の行番号を返します。void
lowerCaseMode
(boolean fl) ワード・トークンを自動的に小文字にするかどうかを判別します。int
このトークナイザの入力ストリームの次のトークンを構文解析します。void
ordinaryChar
(int ch) 文字引数がこのトークナイザの「通常」文字であることを指定します。void
ordinaryChars
(int low, int hi) low <= c <= high
の範囲内のすべての文字cが、このトークナイザの「通常」文字であることを指定します。void
このトークナイザで数値を構文解析するように指定します。void
pushBack()
このトークナイザの次のnextToken
メソッド呼出しでttype
フィールドの現行値を返し、nval
またはsval
フィールドの値は変更しないようにします。void
quoteChar
(int ch) この文字に一致するペアで、このトークナイザの文字列定数を区切るように指定します。void
このトークナイザの構文表をリセットし、すべての文字を「通常」文字にします。void
slashSlashComments
(boolean flag) トークナイザがC++スタイルのコメントを認識するかどうかを判別します。void
slashStarComments
(boolean flag) トークナイザがCスタイルのコメントを認識するかどうかを判別します。toString()
現在のストリーム・トークンの文字列表現と、それが発生する行番号を返します。void
whitespaceChars
(int low, int hi) low <= c <= high
の範囲内のすべての文字cが空白文字であることを指定します。void
wordChars
(int low, int hi) low <= c <= high
の範囲内のすべての文字cがワード構成要素であることを指定します。
-
フィールド詳細
-
ttype
public int ttypenextToken
メソッドの呼出しのあと、このフィールドには読み込まれたばかりのトークンの型が入ります。 単一文字トークンの場合、その値は整数に変換された単一文字です。 引用文字列トークンの場合、その値は引用文字です。 それ以外の場合は、次の値のいずれかになります。TT_WORD
は、トークンがワードであることを示す。TT_NUMBER
は、トークンが数値であることを示す。TT_EOL
は、行の終わりに達したことを示す。eolIsSignificant
メソッドが引数true
で呼び出された場合、このフィールドはこの値のみを持つことができる。TT_EOF
は、入力ストリームの終わりに達したことを示す。
このフィールドの初期値は -4です。
- 関連項目:
-
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です。
- 関連項目:
-
nval
public double nval現在のトークンが数値の場合、このフィールドにはその数値が入ります。ttype
フィールドの値がTT_NUMBER
の場合、現在のトークンは数値です。このフィールドの初期値は0.0です。
- 関連項目:
-
-
コンストラクタの詳細
-
StreamTokenizer
@Deprecated public StreamTokenizer(InputStream is) 非推奨。JDK Version 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
- 入力ストリーム。- 関連項目:
- バイト値(
-
StreamTokenizer
public StreamTokenizer(Reader r) 指定された文字ストリームを構文解析するトークナイザを作成します。- パラメータ:
r
- 入力ストリームを提供するReaderオブジェクト。- 導入されたバージョン:
- 1.1
-
-
メソッドの詳細
-
resetSyntax
public void resetSyntax()このトークナイザの構文表をリセットし、すべての文字を「通常」文字にします。 通常文字の詳細は、ordinaryChar
メソッドを参照してください。- 関連項目:
-
wordChars
public void wordChars(int low, int hi) low <= c <= high
の範囲内のすべての文字cがワード構成要素であることを指定します。 ワード・トークンは、ワード構成要素の後ろにゼロ個以上のワード構成要素または数値構成要素が続いたものです。- パラメータ:
low
- 範囲の最小値。hi
- 範囲の最大値。
-
whitespaceChars
public void whitespaceChars(int low, int hi) low <= c <= high
の範囲内のすべての文字cが空白文字であることを指定します。 空白文字の機能は、入力ストリーム内でトークンを区切ることだけです。指定された範囲内の文字に対するその他の属性の設定はすべてクリアされます。
- パラメータ:
low
- 範囲の最小値。hi
- 範囲の最大値。
-
ordinaryChars
public void ordinaryChars(int low, int hi) low <= c <= high
の範囲内のすべての文字cが、このトークナイザの「通常」文字であることを指定します。 通常文字の詳細は、ordinaryChar
メソッドを参照してください。- パラメータ:
low
- 範囲の最小値。hi
- 範囲の最大値。- 関連項目:
-
ordinaryChar
public void ordinaryChar(int ch) 文字引数がこのトークナイザの「通常」文字であることを指定します。 コメント文字、ワード構成要素、文字列区切り文字、空白、または数値文字として文字が持つ特殊な意味は取り除かれます。 パーサーは、このような文字を検出すると、これを単一の文字トークンとして扱い、ttype
フィールドに文字の値を設定します。行末記号を「通常」文字にすると、
StreamTokenizer
が行をカウントする機能に干渉する可能性があります。lineno
メソッドが、行のカウントでそのような行末記号の存在を考慮しなくなることがあります。- パラメータ:
ch
- 文字。- 関連項目:
-
commentChar
public void commentChar(int ch) 文字引数が単一行コメントを開始することを指定します。 ストリーム・トークナイザは、コメント文字から行の終わりまでの間の文字をすべて無視します。指定された文字に対するその他の属性の設定はすべてクリアされます。
- パラメータ:
ch
- 文字。
-
quoteChar
public void quoteChar(int ch) この文字に一致するペアで、このトークナイザの文字列定数を区切るように指定します。nextToken
メソッドが文字列定数を検出すると、ttype
フィールドには文字列区切り文字が設定され、sval
フィールドには文字列の本体が設定されます。文字列の引用文字が検出されると、文字列の引用文字(これは含まない)の後ろから、同じ文字列の引用文字の次の出現場所、行末記号、またはファイルの終わり(これらは含まない)までのすべての文字で文字列が構成されていると認識されます。
"\n"
や"\t"
などの通常のエスケープ・シーケンスは認識され、文字列の構文解析時に単一文字に変換されます。指定された文字に対するその他の属性の設定はすべてクリアされます。
- パラメータ:
ch
- 文字。- 関連項目:
-
parseNumbers
public void parseNumbers()このトークナイザで数値を構文解析するように指定します。 このトークナイザの構文表が変更されます。0 1 2 3 4 5 6 7 8 9 . -
これら12個の各文字が「数値」属性を持つようになります。
パーサーは、倍精度の浮動小数点数の形式のワード・トークンを検出すると、
ttype
フィールドに値TT_NUMBER
を設定し、トークンの数値をnval
フィールドに入れて、このトークンをワードではなく数値として扱います。- 関連項目:
-
eolIsSignificant
public void eolIsSignificant(boolean flag) 行の終わりをトークンとして処理するかどうかを判別します。 flag引数がtrueの場合、このトークナイザは行の終わりをトークンとして処理します。行の終わりが読み込まれると、nextToken
メソッドはTT_EOL
を返し、ttype
フィールドにこの値を設定します。行は、復帰文字(
'\r'
)または改行文字('\n'
)で終わる文字シーケンスです。 また、直後に改行文字が続く復帰文字は、行末を表す単一のトークンとして扱われます。flag
がfalseの場合、行末文字は空白として扱われ、その機能はトークンを区切るだけです。- パラメータ:
flag
-true
は、行末文字が独立したトークンであることを示す。false
は、行末文字が空白であることを示す。- 関連項目:
-
slashStarComments
public void slashStarComments(boolean flag) トークナイザがCスタイルのコメントを認識するかどうかを判別します。 flag引数がtrue
の場合、このストリーム・トークナイザはCスタイルのコメントを認識します。/*
と*/
の間のテキストはすべて破棄されます。flag引数が
false
の場合、Cスタイルのコメントは特別には扱われません。- パラメータ:
flag
-true
は、Cスタイルのコメントを認識して無視することを示す。
-
slashSlashComments
public void slashSlashComments(boolean flag) トークナイザがC++スタイルのコメントを認識するかどうかを判別します。 flag引数がtrue
の場合、このストリーム・トークナイザはC++スタイルのコメントを認識します。 スラッシュ文字('/'
)が2つ続く場合、これは行の終わりまで続くコメントの始まりを意味します。flag引数が
false
の場合、C++スタイルのコメントは特別には扱われません。- パラメータ:
flag
-true
は、C++スタイルのコメントを認識して無視することを示す。
-
lowerCaseMode
public void lowerCaseMode(boolean fl) ワード・トークンを自動的に小文字にするかどうかを判別します。 flag引数がtrue
の場合、ワード・トークンが返されるたびにsval
フィールドの値が小文字にされます。ttype
フィールドが持つ値TT_WORD
)は、このトークナイザのnextToken
メソッドからのものです。flag引数が
false
の場合、sval
フィールドは変更されません。- パラメータ:
fl
-true
は、すべてのワード・トークンを小文字にすることを示す。- 関連項目:
-
nextToken
public int nextToken() throws IOExceptionこのトークナイザの入力ストリームの次のトークンを構文解析します。 次のトークンの型はttype
フィールドに返されます。 トークンに関する補足情報は、このトークナイザのnval
フィールドまたはsval
フィールドにあります。このクラスの一般的なクライアントは、まず最初に構文表を設定してからnextTokenを呼び出すループに入り、TT_EOFが返されるまでトークンを順次解析します。
- 戻り値:
ttype
フィールドの値。- 例外:
IOException
- 入出力エラーが発生した場合。- 関連項目:
-
pushBack
public void pushBack()このトークナイザの次のnextToken
メソッド呼出しでttype
フィールドの現行値を返し、nval
またはsval
フィールドの値は変更しないようにします。- 関連項目:
-
lineno
public int lineno()現在の行番号を返します。- 戻り値:
- このストリーム・トークナイザの現在の行番号。
-
toString
-