StreamTokenizer
,以满足我的需求。
就像java的StreamTokenizer
一样,我有一个nextToken()
方法,它返回一个表示找到的数据类型的整数。
我想要做的是,如果令牌与我使用的任何正则表达式模式都不匹配,它会将令牌本身作为整数代码返回。例如,令牌'$'将导致返回一个数字,使得println(数字)将打印$。
我不知道怎么做,有人吗?
谢谢!
答案 0 :(得分: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();
}