如何使StreamTokenizer识别与数字混合的字符作为单词

时间:2013-05-13 17:00:15

标签: java object lexer

一切都在我的问题:) 我目前正在开发一种使用反向波兰表示法的计算器。 除非StreamTokenizer遇到类似354a1b的内容,否则一切正常。我想要的是StreamTokenizer将其视为单词而不是单词后跟单词。这是我的代码:

sT = new StreamTokenizer(f);
sT.resetSyntax();
sT.eolIsSignificant(false);
sT.wordChars('a', 'z');
sT.wordChars('A', 'Z');
sT.whitespaceChars(32, 32);
sT.parseNumbers();

while (sT.ttype != StreamTokenizer.TT_EOF){
    int ttype = sT.ttype;
if (ttype == StreamTokenizer.TT_NUMBER) {
      calc.empile(sT.nval);
}       
else{
  if (!calc.stack.isEmpty()) {
    switch (ttype) {
    case '+':
          calc.plus();
      break;
    case '-':
      calc.moins();
      break;
    case '*':
      calc.mult();
      break;
    case '/':
      calc.div();
      break;
      }
    }
  }
  sT.nextToken();
}

1 个答案:

答案 0 :(得分:0)

答案是:StreamTokenizer splits up 001_to_003 into two tokens; how can I prevent it from doing so?

但我认为你可以这样做:How do I sidestep TT_NUMBER from StreamTokenizer

...然后尝试通过迭代结果来解析你的双打或整数。

希望它有所帮助,尽管这里的问题没有明确答案......