Java 词法分析器
大家好,我是java初学者:)所以我正在做的是,我试图用java构建一个词法分析器,但我一直在试图读取字符串中的下一个字符,我试图使用查找函数进行检查,但我不知道如何在主程序中使用它。这是密码Java 词法分析器,java,string,lexical-analysis,Java,String,Lexical Analysis,大家好,我是java初学者:)所以我正在做的是,我试图用java构建一个词法分析器,但我一直在试图读取字符串中的下一个字符,我试图使用查找函数进行检查,但我不知道如何在主程序中使用它。这是密码 import java.util.*; import java.util.Scanner; public class LAnalyze{ public static int i; public static void main(String[] args) { String s =
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
*/
import java.util.*;
导入java.util.Scanner;
公共类LAnalyze{
公共静态INTI;
公共静态void main(字符串[]args){
字符串s=“(3+4)*5”;
System.out.println(“s=“+s”);
char[]chars=s.toCharArray();
对于(字符i=0;i<8;i++){
如果(i==0){
i=s.charAt(0);
查找();
}
}
}
公共整数查找(){
开关(一){
格“(”:
System.out.println(“下一个令牌=“+””“+i+””
+“下一个词素=25”);
打破
案例“)”:
System.out.println(“下一个令牌=“+””“+i+””
+“下一个词素=26”);
打破
格“+”:
System.out.println(“下一个令牌=“+””“+i+””
+“下一个词素=21”);
打破
案例'-':
System.out.println(“下一个令牌=“+””“+i+””
+“下一个词素=22”);
打破
案例“*”:
System.out.println(“下一个令牌=“+””“+i+””
+“下一个词素=23”);
打破
案例“/”:
System.out.println(“下一个令牌=“+””“+i+””
+“下一个词素=24”);
违约:
System.out.println(“下一个令牌=“+””“+i+””
+“下一个词素=20”);
}
返回0;
}
}
/*假设输出如下所示:
Next Token=“(“Next lexeme=25
Next Token=“3”Next lexeme=20
Next Token=“+”Next lexeme=21
.
.
.
Next Token=“)”Next lexeme=26
*/
您可以通过以下代码执行
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;
}
希望这能对您有所帮助。我想您需要更改循环以实际前进到数组的单元格上(目前您经常查看第0个索引处的第一个元素):
publicstaticvoidmain(字符串[]args){
字符串s=“(3+4)*5”;
System.out.println(“s=“+s”);
对于(int i=0;i
是的,非常感谢!这正是我一直想做的:)
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
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 '(':
// ...
}
}