Reputation: 137
hi guys im beginner in java :) so what im doing is that im trying to build a lexical analyzer using java but im stuck trying to read the next character in the string i tried to use the lookup function to check but i dont know how to use it in the main. this is the code
import java.util.*;
import java.util.Scanner;
public class LAnalyze{
public static int i;
public static void main(String[] args) {
String s = "(3+4)*5";
System.out.println("s = " + s);
char[] chars = s.toCharArray();
for (char i = 0; i < 8; i++) {
if (i == 0) {
i = s.charAt(0);
lookup();
}
}
}
public int lookup() {
switch (i) {
case '(':
System.out.println("Next Token = " + "'" + i + "'"
+ " Next lexeme = 25");
break;
case ')':
System.out.println("Next Token = " + "'" + i + "'"
+ " Next lexeme = 26");
break;
case '+':
System.out.println("Next Token = " + "'" + i + "'"
+ " Next lexeme = 21");
break;
case '-':
System.out.println("Next Token = " + "'" + i + "'"
+ " Next lexeme = 22");
break;
case '*':
System.out.println("Next Token = " + "'" + i + "'"
+ " Next lexeme = 23");
break;
case '/':
System.out.println("Next Token = " + "'" + i + "'"
+ " Next lexeme = 24");
default:
System.out.println("Next Token = " + "'" + i + "'"
+ " Next lexeme = 20");
}
return 0;
}
}
/* the output is suppose to be something like this:
Next Token = "(" Next lexeme = 25
Next Token = "3" Next lexeme = 20
Next Token = "+" Next lexeme = 21
.
.
.
Next Token = ")" Next lexeme = 26
*/
Upvotes: 2
Views: 3915
Reputation: 11996
I guess you need to change loop to actually advance over cells of array (currently you constantly peek at the first element at 0th index):
public static void main(String[] args) {
String s = "(3+4)*5";
System.out.println("s = " + s);
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
lookup(ch);
}
}
public static void lookup(char ch) {
switch (ch) {
case '(':
// ...
}
}
Upvotes: 0
Reputation: 6657
You can do by the following code.
public static void main(String[] args) {
String s = "(3+4)*5";
System.out.println("s = " + s);
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length ; i++) {
//System.out.println("s = " + s);
lookup(chars[i]);
}
}
public static int lookup(int i) {
switch (i) {
case '(':
System.out.println("Next Token = " + "'" + (char)i + "'"
+ " Next lexeme = 25");
break;
case ')':
System.out.println("Next Token = " + "'" + (char)i + "'"
+ " Next lexeme = 26");
break;
case '+':
System.out.println("Next Token = " + "'" + (char)i + "'"
+ " Next lexeme = 21");
break;
case '-':
System.out.println("Next Token = " + "'" + (char)i + "'"
+ " Next lexeme = 22");
break;
case '*':
System.out.println("Next Token = " + "'" + (char)i + "'"
+ " Next lexeme = 23");
break;
case '/':
System.out.println("Next Token = " + "'" + (char)i + "'"
+ " Next lexeme = 24");
default:
System.out.println("Next Token = " + "'" + (char)i + "'"
+ " Next lexeme = 20");
}
return 0;
}
OUTPUT
s = (3+4)*5
Next Token = '(' Next lexeme = 25
Next Token = '3' Next lexeme = 20
Next Token = '+' Next lexeme = 21
Next Token = '4' Next lexeme = 20
Next Token = ')' Next lexeme = 26
Next Token = '*' Next lexeme = 23
Next Token = '5' Next lexeme = 20
Hope this will help you.
Upvotes: 2