Java 需要有关创建令牌的scanner类的帮助吗
im获取错误:找不到符号 构造函数方法令牌。但我知道 在令牌类中有一个构造函数 找不到符号变量 标记码。很明显我一直在用它 我想我正确初始化了它 那怎么了 找不到符号变量scantest。 我把它放在同一个文件夹里 上课的时候为什么不读呢 导入java.io.BufferedReader; 导入java.io.FileReader; 导入java.io.*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;
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));