⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cifafenxi.txt

📁 此为编译原理中的文法分析
💻 TXT
字号:
package 编译原理;
import java.io.*;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.util.StringTokenizer;
public class test{
    public static int enter_count = 0;
    public static int space_count = 0;
    String result=null;
   public String getResult() {
                return result;
        }
public test(String path){
          File file=new File(path);
        int i = 0,j = 0,k = 0,n = 0,m = 0;
        int count = 0,count1 = 0;
        String s1[]=new String[20];
        String s2[]=new String[20];
        String s3[]=new String[20];
        String s4[]=new String[20];
        String s5[]=new String[20];
        String s6[]=new String[20];
        String s7[]=new String[20];
        String s8[]=new String[20];
        String s9[]=new String[20];
        String s10[]=new String[20];
        String s11[]=new String[20];
        String s12[]=new String[20];
        try{
            //计算行数
            FileInputStream fis = new FileInputStream(file);
            DataInputStream dis = new  DataInputStream(fis);
            while(dis.readLine()!=null){
                enter_count++;
            }
            //将每一行符值给一个字符串
            fis = new FileInputStream(file);//由于上面的dis.readLine()将文件读完了,所以要从新初始化一遍
            dis = new DataInputStream(fis);
            String s[] = new String[enter_count];
            i = 0;
            while(dis.available()!=0){
                s[i] = dis.readLine();
                s1[i]=s[i];
                i++;
            }
            dis.close();
            //将每个字符串以空格分割
            for(i=0;i<enter_count;i++){
                StringTokenizer space = new StringTokenizer(s[i]," ");
                space_count = space.countTokens();
                while(space.hasMoreTokens()){
                    s2[n]=space.nextToken();
                    n++;
                    j++;
                }
                j=0;
            }
            //将每个字符串以"+"号分开
            n=0;
            for(i=0;i<6;i++){
                StringTokenizer space = new StringTokenizer(s2[i],"+",true);
                space_count = space.countTokens();
                while(space.hasMoreTokens()){
                    s3[n]=space.nextToken();
                    n++;
                    j++;
                    count++;
                }
                j=0;
            }
            count1=count;
            count=0;
            //s4
            n=0;
            for(i=0;i<count1;i++){
                StringTokenizer space = new StringTokenizer(s3[i],"-",true);
                space_count = space.countTokens();
                while(space.hasMoreTokens()){
                    s4[n]=space.nextToken();
                    n++;
                    j++;
                    count++;
                }
                j=0;
            }
            count1=count;
            count = 0;
            //s5
            n=0;
            for(i=0;i<count1;i++){
                StringTokenizer space = new StringTokenizer(s4[i],"*",true);
                space_count = space.countTokens();
                while(space.hasMoreTokens()){
                    s5[n]=space.nextToken();
                    n++;
                    j++;
                    count++;
                }
                j=0;
            }
            count1=count;
            count = 0;
            //s6
            n=0;
            for(i=0;i<count1;i++){
                StringTokenizer space = new StringTokenizer(s5[i],"/",true);
                space_count = space.countTokens();
                while(space.hasMoreTokens()){
                    s6[n]=space.nextToken();
                    n++;
                    j++;
                    count++;
                }
                j=0;
            }
            count1=count;
            count = 0;
            //s7
            n=0;
            for(i=0;i<count1;i++){
                StringTokenizer space = new StringTokenizer(s6[i],"<",true);
                space_count = space.countTokens();
                while(space.hasMoreTokens()){
                    s7[n]=space.nextToken();
                    n++;
                    j++;
                    count++;
                }
                j=0;
            }
            count1=count;
            count = 0;
            //s8
            n=0;
            for(i=0;i<count1;i++){
                StringTokenizer space = new StringTokenizer(s7[i],">",true);
                space_count = space.countTokens();
                while(space.hasMoreTokens()){
                    s8[n]=space.nextToken();
                    n++;
                    j++;
                    count++;
                }
                j=0;
            }
            count1=count;
            count = 0;
            //s9
            n=0;
            for(i=0;i<count1;i++){
                StringTokenizer space = new StringTokenizer(s8[i],"=",true);
                space_count = space.countTokens();
                while(space.hasMoreTokens()){
                    s9[n]=space.nextToken();
                    n++;
                    j++;
                    count++;
                }
                j=0;
            }
            count1=count;
            count = 0;
            //s10
            n=0;
            for(i=0;i<count1;i++){
                StringTokenizer space = new StringTokenizer(s9[i],"(",true);
                space_count = space.countTokens();
                while(space.hasMoreTokens()){
                    s10[n]=space.nextToken();
                    n++;
                    j++;
                    count++;
                }
                j=0;
            }
            count1=count;
            count = 0;
            //s11
            n=0;
            for(i=0;i<count1;i++){
                StringTokenizer space = new StringTokenizer(s10[i],")",true);
                space_count = space.countTokens();
                while(space.hasMoreTokens()){
                    s11[n]=space.nextToken();
                    n++;
                    j++;
                    count++;
                }
                j=0;
            }
            count1=count;
            count = 0;
            //s12
            n=0;
            for(i=0;i<count1;i++){
                StringTokenizer space = new StringTokenizer(s11[i],";",true);
                space_count = space.countTokens();
                while(space.hasMoreTokens()){
                    s12[n]=space.nextToken();
                    n++;
                    j++;
                    count++;
                }
                j=0;
            }
            count1=count;
            count = 0;
            //去处空格
            String s_final[]=new String[count1];
            for(i=0;i<count1;i++){
                s_final[i]=s12[i].trim();
            }
            //判断前缀
            boolean word=false;
            for(i=0;i<count1;i++){
                word=false;
                //如果是关键字
                String keyword[]={"if","then","else","while","do"};
                for(j=0;j<5;j++){
                    if(s_final[i].compareTo(keyword[j])==0){
                        System.out.println("<"+s_final[i]+","+"->");
                        word=true;
                    }
                }
                //如果是运算符或界符
                String operators[]={"+","-","*","/","<",">","=","(",")",";"};
                for(j=0;j<10;j++){
                    if(s_final[i].compareTo(operators[j])==0){
                        System.out.println("<"+s_final[i]+","+"->");
                        word=true;
                    }
                }
                if(word){
                    continue;
                }
                //如果是十进制
                if((s_final[i].compareTo("0")==0)||s_final[i].startsWith("1")||s_final[i].startsWith("2")||s_final[i].startsWith("3")||s_final[i].startsWith("4")||s_final[i].startsWith("5")||s_final[i].startsWith("6")||s_final[i].startsWith("7")||s_final[i].startsWith("8")||s_final[i].startsWith("9")){
                   // System.out.println("<1,"+s_final[i]+">");
                    result=result+"<1,"+s_final[i]+">"+"\n";
                }
                //如果是八进制
                if(s_final[i].startsWith("0")&&(!s_final[i].startsWith("0x"))){
                   // System.out.println("<2,"+s_final[i].substring(1)+">");
                    result=result+"<2,"+s_final[i].substring(1)+">"+"\n";
                }
                //如果是十六进制
                if(s_final[i].startsWith("0x")){
                   // System.out.println("<3,"+s_final[i].substring(2)+">");
                    result=result+"<3,"+s_final[i].substring(2)+">"+"\n";
                }
                //如果是标示符
                if(s_final[i].startsWith("0")){ }
                else{
                   // System.out.println("<0,"+s_final[i]+">");
                    result=result+"<0,"+s_final[i]+">"+"\n";
                }
            }
        }catch(Exception e){
            System.err.println("File input error");
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -