Создание моего собственного StreamTokenizer в Java - PullRequest
0 голосов
/ 30 марта 2011

Привет Я строю свой собственный StreamTokenizer, который бы соответствовал моим потребностям. Как и в Java StreamTokenizer, у меня есть метод nextToken(), который возвращает целое число, представляющее тип найденных данных. Я пытаюсь сделать так, чтобы в случае, если токен не соответствовал ни одному из шаблонов регулярных выражений, которые я использую, он возвращал сам токен в виде целочисленного кода. Например, токен «$» будет возвращать число, такое, что println (число) будет печатать $. Я понятия не имею, как это сделать, кто-нибудь?

спасибо!

1 Ответ

1 голос
/ 30 марта 2011

Если вы хотите построить лексер из набора регулярных выражений, посмотрите на генераторы синтаксического анализатора, такие как 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...