import parser.Parser;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
// 关键词
List<String> keyList = new ArrayList<>(Arrays.asList("int","String"));
// 关键词数
List<Integer> keyNum = new ArrayList<>(Arrays.asList(1,2));
// 运算符和界符
List<String> symbolList = new ArrayList<>(Arrays.asList("+","-"));
// 运算符和界符的数
List<Integer> symbolNum = new ArrayList<>(Arrays.asList(10,11));
// 从文件取出的字符
String letter;
// 将字符转为单词
String words;
String test ="int main() { int i,j; String a,b;} 123 ccd";
Parser parser = new Parser();
parser.analysis(test,keyList);
}
}
package parser;
import java.util.List;
public class Parser {
public void analysis(String test,List<String> keyList){
System.out.println("test:" + test);
int length = test.length();
System.out.println("length:" + length);
// 字符类型
for(int num=0;num<length;){
char ch = test.charAt(num);
System.out.println("ch:" + ch);
int typeword = typeword(ch);
// System.out.println("typeword:" + typeword);
String addword=Character.toString(ch);
String[] rs;
switch (typeword){
case 1:
rs= number(test,addword,num,keyList);
addword = rs[0];
num = Integer.parseInt(rs[1]);
System.out.println("<"+addword+",1,int"+">");
break;
case 2:
rs= identifier(test,addword,num,keyList);
addword = rs[0];
num = Integer.parseInt(rs[1]);
System.out.println("<"+addword+",2,String"+">");
break;
case 3:
rs= symbol(test,addword,num);
addword = rs[0];
num = Integer.parseInt(rs[1]);
System.out.println("<"+addword+",3,symbol"+">");
break;
default:
num++;
break;
}
}
}
public int typeword(char str) {
if (Character.isDigit(str)) {
return 1;
}
if (Character.isLetter(str)) {
return 2;
}
if (Character.toString(str).equals("+") || Character.toString(str).equals("-")) {
return 3;
}
return 0;
}
public String[] identifier(String letter, String s, int n, List<String> keyList) {
int j = n + 1;
boolean flag = true;
while (flag) {
if (j >= letter.length()) {
break;
}
if (isNumeric(letter.charAt(j)) || Character.isLetter(letter.charAt(j))) {
s += letter.charAt(j);
if (isKeyword(keyList, s)) {
n = ++j;
return new String[]{s, String.valueOf(n)};
}
j++;
} else {
flag = false;
}
}
n = j;
return new String[]{s, String.valueOf(n)};
}
public String[] symbol(String letter, String s, int n) {
int j = n + 1;
boolean flag = true;
while (flag) {
if (Character.toString(letter.charAt(j)).equals("+") || Character.toString(letter.charAt(j)).equals("-")) {
s += letter.charAt(j);
j++;
} else {
flag = false;
}
}
n = j;
return new String[]{s, String.valueOf(n)};
}
public String[] number(String letter, String s, int n, List<String> keyList) {
int j = n + 1;
boolean flag = true;
while (flag) {
if (isNumeric(letter.charAt(j))) {
s += letter.charAt(j);
j++;
} else {
flag = false;
}
}
n = j;
return new String[]{s, String.valueOf(n)};
}
public static boolean isKeyword(List<String> keyList, String str) {
try {
return keyList.contains(str);
} catch (Exception e) {
return false;
}
}
public static boolean isNumeric(char str) {
try {
Double.parseDouble(Character.toString(str));
return true;
} catch (Exception e) {
return false;
}
}
}
测试结果:



















