2011-03-30 9 views
0

こんにちは。 私は自分自身のニーズにマッチするStreamTokenizerを構築しています。 javaのStreamTokenizerと同じように、見つかったデータのタイプを表す整数を返すnextToken()メソッドがあります。 私がしようとしているのは、トークンが使用する正規表現パターンと一致しない場合、トークン自体を整数コードとして返します。例えば、 '$'トークンは、println(number)が$を出力するような番号を返すでしょう。 私はそれをどうやって行うのか分かりません、誰ですか?独自のStreamTokenizerをJavaで構築する

ありがとうございました!

+3

'復帰「$」; 'や'リターン(int型)「$」:

あなたは本当に、あなたは常に次のイディオムを使用することができ、手でロールするために、独自のをしたい場合'println((char)number)'おそらく?そうでない場合は、問題をより詳しく説明してください。 –

+0

私は試してみます - StreamTokenizerを使用していて、現在のトークンがTT_NUMBERまたはTT_WORDでない場合は、st.nextToken()を切り替えて大文字小文字の '$'を持つことができます。つまり、$記号を表す整数 – itamar

答えて

1

正規表現の束からレクサーを構築する場合は、ANTLRのようなパーサジェネレータを調べます。その後、 `と、

// Matches tokens foo and bar 
Pattern myTokenDefinition = Pattern.compile("^(?:foo|bar)"); 

public boolean hasNext() { 
    return sourceText.length() != 0; 
} 

public String next() { 
    if (sourceText.length() != 0) { 
    Matcher m = myTokenDefinition.matcher(sourceText); 
    String token; 
    if (m.find()) { 
     token = m.group(); 
    } else { 
     token = sourceText.substring(0, 1); 
    } 
    sourceText = sourceText.substring(token.length()); 
    return token; 
    } 
    throw new NoSuchElementException(); 
} 
関連する問題