java程序-编译原理实验

   java课的程序实验不难写,但其它和编程有关的实验却很难写,数据结构实验如此,数值分析实验如此,现在学编译原理也如此,当初数据结构的二叉树程序我想都懒得去想,感觉毫无头绪。这次的编译原理上个星期布置的实验,明天要交报告了,今天正好星期天,用了大半天的时间终于被我凑出了结果。结构很乱,尤其是很多重复的代码,没有用到重构,自己看着都不好意思。算了反正写出来了。
import  java.io. * ;
import  java.util.StringTokenizer;

public   class  test {
    
public static int enter_count = 0;
    
public static int space_count = 0;
    
public static void main(String args[]){
        
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("myfile.txt");
            DataInputStream dis 
= new  DataInputStream(fis);
            
while(dis.readLine()!=null){
                enter_count
++;        
            }

            
//将每一行符值给一个字符串
            fis = new FileInputStream("myfile.txt");//由于上面的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]+">");
                }

                
//如果是八进制
                if(s_final[i].startsWith("0")&&(!s_final[i].startsWith("0x"))){
                    System.out.println(
"<2,"+s_final[i].substring(1)+">");
                }

                
//如果是十六进制
                if(s_final[i].startsWith("0x")){
                    System.out.println(
"<3,"+s_final[i].substring(2)+">");
                }

                
//如果是标示符
                if(s_final[i].startsWith("0")){ }
                
else{
                    System.out.println(
"<0,"+s_final[i]+">");
                }

            }

        }
catch(Exception e){
            System.err.println(
"File input error");
        }

    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值