2011-03-30 43 views
0

嗨有 我正在构建我自己的StreamTokenizer,这将符合我的需求。 就像java的StreamTokenizer,我有一个nextToken()方法,返回一个整数代表找到的数据类型。 我想要做的是,如果令牌不匹配我使用的任何正则表达式模式,它将返回令牌本身作为整数代码。例如,标记'$'会导致返回一个数字,使得println(number)将打印$。 我不知道该怎么做,任何人?在java中构建我自己的StreamTokenizer

谢谢!

+3

'回报“$”;'或'回报(INT)“$”;'然后'println((char)number)'也许?如果不是,请详细解释您的问题。 – 2011-03-30 13:00:08

+0

我会尝试 - 当你使用StreamTokenizer,并且当前令牌不是TT_NUMBER或TT_WORD时,你可以切换(st.nextToken())并且有'$'的情况:这意味着它返回一个代表$符号的整数 – itamar 2011-03-30 13:30:29

回答

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(); 
}