Java 需要有关创建令牌的scanner类的帮助吗

Java 需要有关创建令牌的scanner类的帮助吗,java,compiler-construction,token,java.util.scanner,Java,Compiler Construction,Token,Java.util.scanner,im获取错误:找不到符号 构造函数方法令牌。但我知道 在令牌类中有一个构造函数 找不到符号变量 标记码。很明显我一直在用它 我想我正确初始化了它 那怎么了 找不到符号变量scantest。 我把它放在同一个文件夹里 上课的时候为什么不读呢 导入java.io.BufferedReader; 导入java.io.FileReader; 导入java.io.* public class scanner implements CompilerConstants { private char c;

im获取错误:找不到符号 构造函数方法令牌。但我知道 在令牌类中有一个构造函数

找不到符号变量 标记码。很明显我一直在用它 我想我正确初始化了它 那怎么了

找不到符号变量scantest。 我把它放在同一个文件夹里 上课的时候为什么不读呢

导入java.io.BufferedReader; 导入java.io.FileReader; 导入java.io.*

public class scanner implements CompilerConstants {
 private char c;
  private BufferedReader source; 
  public int token;

  private String attr = "";
  //private int val = '0'; 
  private

    public scanner(BufferedReader buffer) {
     source = buffer;

     getChar();
    } //constructor of scanner


    public void getChar()
    {
     c = (char)(source.read());
     //do a read in
    }


    //lookup for finding identifiers
    public boolean lookup(String word)
    {
     boolean check = false;
     for(int i=0; i < RESERVEDWORD.length;i++)
      if(word==(RESERVEDWORD[i]))
      {
       check = true;
      }
     return check;
    }


    //public boolean T(int tcc, String attt) //to return token
    //{
    // tokenCode = tcc;
    // attribute = attt;
    // return T;
   // }


     public Token nextToken() throws IOException
    {

    attr = "";

    //need to save to do lookup see if its identifier or not
    while(c!=EOFCHAR);  //if not end of file then do  
    { 
     while (Character.isWhitespace(c))//remove white space, check whether is letter or digit
     {
   getChar();
     }
     if (Character.isLetter(c))
     {
   while(Character.isLetterOrDigit(c))
   { 
    attr = attr + c;
    getChar();
   }

   return new Token(lookup(attr), attr); //
     }
    else if (Character.isDigit(c)) {
   while(Character.isDigit(c))
   {
    attr = attr + c;
    getChar();
   }
   return new Token(NUMBER, attr);
    } 
    else {
 switch (c) {

  case '<' : getChar();
   if(c=='>')
   {
    getChar();
    return new Token(NE, null);
   } 
   else if (c=='=')
   {
    getChar();
    return new Token(LE, null);
   }
   return new Token(LT, null);


  case '>' : getChar();
   if(c=='<')
   {
    getChar();
    return new Token(NE, null);
   } 
   else if (c=='=')
   {
    getChar();
    return new Token(GE, null);
   }
   return new Token(GT, null);


  case '=' : getChar();
  return new Token(EQ, null);

  case '|' : getChar();
  return new Token(OR, null);

  case '+' : getChar();
  return new Token(PLUS, null);

  case '-' : getChar();
  return new Token(MINUS, null);

  case '*' : getChar();
  return new Token(TIMES, null);

  case '/' : getChar();
  return new Token(DIVIDE, null);

  case '[' : getChar();
  return new Token(LEFTSQ, null);

  case ']' : getChar();
  return new Token(RIGHTSQ, null);

  case '(' : getChar();
  return new Token(LEFTPAREN, null);

  case ')' : getChar();
  return new Token(RIGHTPAREN, null);

  case ',' : getChar();
  return new Token(COMMA, null);

  case EOFCHAR : getChar();
  return new Token(EOF, null);

 }
 } // switch

  //return EOF.Token;
  return Token(tokenCode, attr);  //tokenAttribute

    } // if
   // return Token;
} // getToken


public static void main(String[] args)
{
 BufferedReader source = new BufferedReader(new FileReader(scantest.echo));
}
}

此线路有一个问题:

return new Token(lookup(attr), attr);
方法
lookup(attr)
返回一个布尔值,但令牌构造函数希望将
int
作为第一个参数。我可以看到:

public Token(int, String)
但不是:

public Token(boolean, String)
可能您将错误的参数传递给现有的令牌构造函数


现在,关于这一行:

return Token(tokenCode, attr);  //tokenAttribute
tokenCode
实际上没有定义。你在哪里初始化的?你在哪里使用它


最后,关于:

new FileReader(scantest.echo));
很难回答,因为您没有提供类源。echo到底是什么?静态属性

PS:你的课程应该以大写字母开始,和/或使用驼峰式表示法,如
Scanner
ScanTest
,而不是
Scanner
ScanTest
。这是一项建议的公约

public Token(int, String)
public Token(boolean, String)
return Token(tokenCode, attr);  //tokenAttribute
new FileReader(scantest.echo));