简易词法分析器-Java
编译原理课程设计
记录下,防丢
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循环是在拆分tokenstr = InputToArray(token); //str[]是token的拆分//for (int i=0;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+",标识符)");elseSystem.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//{// 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;}
}
程序运行结果:
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
