1

我测试了这个例子(lex.java,但它只给了我一个输出。

我作为读者给出了这篇文章:

public class LexeTest{
 private int a = 14;
}

nextToken ()函数是:

 public Category nextToken () {
        if (inp.findWithinHorizon (tokenPat, 0) == null)
            return Category.EOF;
        else {
            lastLexeme = inp.match ().group (0);
            if (inp.match ().start (1) != -1)
                return nextToken ();
            else if (inp.match ().start (2) != -1) 
                return Category.IDENT;
            else if (inp.match ().start (3) != -1)
                return Category.NUMERAL;
            Category result = tokenMap.get (lastLexeme);
            if (result == null)
                return Category.ERROR;
            else
                return result;
        }
    }

isdie主要方法:

System.out.println(lexeObject.nextToken());

输出是:

标识

为什么?但文本文件包含多个关键字?有谁知道是什么问题?

4

2 回答 2

2

如果你只调用nextToken()一次,你只会得到一个令牌。我不明白为什么这是一个谜。尝试循环。

于 2013-11-07T09:45:38.687 回答
1

很抱歉这么说,但问题似乎出在你的阅读能力上。这是您链接到的示例的第一条评论的一部分(重点由我添加):

Lexer 生成从提供给构造函数的任意 Reader 获取的令牌流,以响应对Lexer 的 nextToken 例程的重复调用。

于 2013-11-07T09:50:48.977 回答