编译原理课程设计
记录下,防丢
import java.util.Scanner;
public class BY0 {
public static void main(String[] args) {
System.out.println("输入开始");
String token ;
Scanner input = new Scanner(System.in);
token = input.nextLine(); //输入
input.close();
char str[] = null;
int j =0; //记录token的指针位置
//String word = "void" ;
//System.out.println(Identify(word)+"00");
for (int i1=0;i1<token.length();i1++) //此for循环是在拆分token
str = InputToArray(token); //str[]是token的拆分
//for (int i=0;i<token.length();i++)
//System.out.println(str[i]);
while(j<token.length())
{
String word1 = "" ;
if (Character.isDigit(str[j]))//圈2
{
while(true)
{
if (Character.isDigit(str[j]))
{
word1 = word1 +str[j];
j++;
}
else
{
System.out.println("("+word1+",数字)");
break;
}
}
}
else if (Character.isLetter(str[j]))//圈1
{
while(true)
{
if (Character.isLetter(str[j]))
{
word1 = word1 +str[j];
j++;
}
else
{
if (KeyName(word1))//调用一个表,查表
System.out.println("("+word1+",关键字)");
else if (Identify(word1))
System.out.println("("+word1+",标识符)");
else
System.out.println("无法辨识 - > "+word1);
break;
}
}
}
else
{
word1 = word1+str[j];
if (str[j] == '>')
{
j++;
if (str[j] == '=')
{word1 = ">=";j++;}
else
{
//j--;
word1 =">";
}
}
else if (str[j] == '<')
{
j++;
if (str[j] == '=')
{word1 = "<=";j++;}
else
{
//j--;
word1 ="<";
}
}
if (Delimiter(word1)) //界符
{
System.out.println("("+word1+",界符)");
j++;
}
else if (str[j] != 0 && str[j] != ' ') //java初始化为0不为' '
{
//System.out.println("j="+j);
System.out.println("无法辨识 - >> "+str[j]);//最后报错
j++;
}
else if (str[j] == ' ')
j++;
}
}
}
public static char[] InputToArray(String temp_token)
{
char str[] = new char[100];
for (int i =0;i<temp_token.length();i++)
{
while(temp_token.charAt(i) ==' '&&i!=(temp_token.length()-1)&&temp_token.charAt(i+1) ==' ')
i++;
//if (temp_token.charAt(i)!= '')//空格预处理
str[i] = temp_token.charAt(i);
}
//for (int i =0;i<str.length;i++)
//{
// System.out.println(str[i]);
//}
return str;
}
public static boolean KeyName(String word)
{
String keyName[] = new String[100];
keyName[0] = "void";
keyName[1] = "public";
keyName[2] = "int";
for (int i = 0;i<keyName.length;i++)
{
if (word.equals(keyName[i]))
return true;
}
return false;
}
public static boolean Identify(String word)
{
String identify[] = new String[100];
identify[0] = "by";
identify[1] = "abc";
identify[2] = "first";
for (int i = 0;i<identify.length;i++)
{
if (word.equals(identify[i]))
return true;
}
return false;
}
public static boolean Delimiter(String word)
{
String delimiter[] = new String[100];
delimiter[0] = "(";
delimiter[1] = ")";
delimiter[2] = "+";
delimiter[3] = "-";
delimiter[4] = "*";
delimiter[5] = ";";
delimiter[6] = ">";
delimiter[7] = "<";
delimiter[8] = "<=";
delimiter[9] = ">=";
delimiter[10] = "=";
for (int i = 0;i<delimiter.length;i++)
{
if (word.equals(delimiter[i]))
return true;
}
return false;
}
}
程序运行结果: