话不多说,直接看代码:
package tyh.Test;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
public class Word_analyis {
//关键字数组
private static String[] KeyWord = {"if", "else", "return", "while", "int", "float"};
//运算符数组
private static String[] Operator = {">", "<", "=", ">=", "<=", "!=", "==", "||", "&&", "/", "+", "-", "*"};
private static String[] OneOperator = {">", "<", "=", "+", "-", "*", "/", "|", "&", "!"};
//分界符数组
private static String[] Boundaries = {"(", ")", "}", "{", ";"};
//记录字符集读到什么位置
private static int p = 0;
//记录字符串
private static String Word = "";
//记录标识符id
private static int id = 1;
//读文件,返回字符数组
public static char[] read(String fileName){
File file = new File(fileName);
char[] data = new char[255];
try {
FileReader fileReader = new FileReader(file);
fileReader.read(data);
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
return data;
}
//判断是否是关键字
public static boolean isKey(String word){
return Arrays.asList(KeyWord).contains(word);
}
//判断是否是运算符
public static boolean isOperator(String word){
return Arrays.asList(Operator).contains(word);
}
public static boolean isOneOperator(char ch){
String s = String.valueOf(ch);
return Arrays.asList(OneOperator).contains(s);
}
//判断是否是分界符
public static boolean isBoundaries(char ch){
String s = String.valueOf(ch);
return Arrays.asList(Boundaries).contains(s);
}
//判断此字符是否为空格或tab
public static boolean isnull(char ch){
if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n'){
return true;
}
return false;
}
//判断此字符是否为数字
public static boolean isnum(char ch){
if (ch >= '0' && ch <= '9'){
return true;
}
return false;
}
//判断此字符是否为字母
public static boolean isLetters(char ch){
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')){
return true;
}
return false;
}
public static void main(String[] args) {
char[] data = read("D:\\程序\\Maven\\maven-project\\Hbase-demo\\src\\main\\java\\tyh\\source.txt");
System.out.println(data);
System.out.println();
while(data[p] != '#') {
if (isnull(data[p])) {
p++;
} else if (isLetters(data[p])){
Word += data[p];
p++;
while(isLetters(data[p]) || isnum(data[p])){
Word += data[p];
p++;
}
if (isKey(Word)){
System.out.println("<" + Word + ">" + "\t\t" + "关键字");
}else{
System.out.println("<id " + id + ">" + "\t" + Word + "\t" + "标识符");
id++;
}
Word = "";
}else if (isOneOperator(data[p])){
Word += data[p];
p++;
while(isOneOperator(data[p])){
Word += data[p];
p++;
}
if (isOperator(Word)){
System.out.println("<" + Word + ">" + "\t\t" + "运算符");
}
Word = "";
}else if(isnum(data[p])){
while (isnum(data[p])|| (data[p] == '.' && isnum(data[(p + 1)]))){
Word += data[p];
p++;
}
System.out.println("<" + Word + ">" + "\t\t" + "常数");
Word = "";
}else if(isBoundaries(data[p])){
System.out.println("<" + data[p] + ">" + "\t\t" + "分界符");
p++;
}else{
System.out.println("<" + data[p] + ">" + "\t\t" + "无法识别");
p++;
}
}
}
}