why my lexical analyzer displaying indentifer, when all of the variables are not
ID: 3701079 • Letter: W
Question
why my lexical analyzer displaying indentifer, when all of the variables are not indentifer in the dat file in java.
import static java.io.StreamTokenizer.TT_EOF;
import static java.io.StreamTokenizer.TT_NUMBER;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.StreamTokenizer;
public class LexicalAnalyzer {
public static void main(String[] args) throws IOException
{
FileReader fileReader =null;
BufferedReader bufferedReader=null;
try
{
fileReader=new FileReader("lexical.dat");
bufferedReader = new BufferedReader(fileReader);
StreamTokenizer line =new StreamTokenizer(bufferedReader);
while (line.nextToken() != TT_EOF)
{
int token=line.nextToken();
String TOKEN ="";
TOKEN=Integer.toString(token);
System.out.println(TOKEN);
if(TOKEN.equals(TT_NUMBER))
{
System.out.println("Digit" +TT_NUMBER);
}
else if((TOKEN.equals("if"))||(TOKEN.equals ("else"))||(TOKEN.equals("int"))||(TOKEN.equals("while"))||(TOKEN.equals("double")))
{
System.out.println("Keyword");
}
else if (TOKEN.equals('{'))
{
System.out.println("Left Braces");
}
else if(TOKEN.equals ('}'))
{
System.out.println("Right Braces" );
}
else if (TOKEN.equals (')'))
{
System.out.println("Right Paranthesis");
}
else if (TOKEN.equals('('))
{
System.out.println("Left Paranthesis") ;
}
else if((TOKEN.equals ('+'))||(TOKEN.equals('-'))||(TOKEN.equals('*'))||(TOKEN.equals('%'))||(TOKEN.equals('='))||(TOKEN.equals('/')))
{
System.out.println("Binaryoperation");
}
else
System.out.println("Identifier" );
}
}// end of try block
catch(Exception e)
{
System.out.println(e);
}// end catch block
finally
{
if(bufferedReader!=null)
{
bufferedReader.close();
}
} //end finally
} // end of main
} //edn of class
errors:
-3
Identifier
-3
Identifier
-2
Identifier
-1
Identifier
here is the dat file
int x=2+variable/ number;
Explanation / Answer
import static java.io.StreamTokenizer.TT_EOF;
import static java.io.StreamTokenizer.TT_NUMBER;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.StreamTokenizer;
public class LexicalAnalyzer {
public static void main(String[] args) throws IOException {
FileReader fileReader = null;
BufferedReader bufferedReader = null;
try {
fileReader = new FileReader("lexical.dat");
bufferedReader = new BufferedReader(fileReader);
StreamTokenizer line = new StreamTokenizer(bufferedReader);
int token;
while ((token = line.nextToken()) != TT_EOF) {
String TOKEN = "";
TOKEN = Integer.toString(token);
System.out.println(token);
//If token value is greater than 10 then it is a char. So type casting the token to char.
if(token>10){
TOKEN = (char)token+"";
}
else if(token==StreamTokenizer.TT_WORD){
//If token is word then we can get the string value by using sval
TOKEN = line.sval;
}
if (token==TT_NUMBER) {
System.out.println("Digit" + line.nval);
} else if ((TOKEN.equals("if")) || (TOKEN.equals("else")) || (TOKEN.equals("int"))
|| (TOKEN.equals("while")) || (TOKEN.equals("double"))) {
System.out.println("Keyword");
} else if (TOKEN.equals("{")) {
System.out.println("Left Braces");
} else if (TOKEN.equals("}")) {
System.out.println("Right Braces");
} else if (TOKEN.equals(")")) {
System.out.println("Right Paranthesis");
} else if (TOKEN.equals("(")) {
System.out.println("Left Paranthesis");
} else if ((TOKEN.equals("+")) || (TOKEN.equals("-")) || (TOKEN.equals("*")) || (TOKEN.equals("%"))
|| (TOKEN.equals("=")) || (TOKEN.equals("/"))) {
System.out.println("Binaryoperation");
} else{
System.out.println("Identifier");
}
}
} // end of try block
catch (Exception e) {
System.out.println(e);
} // end catch block
finally {
if (bufferedReader != null) {
bufferedReader.close();
}
} // end finally
} // end of main
} // edn of class
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.