为了账号安全,请及时绑定邮箱和手机立即绑定

编译原理的词法分析程序出问题?

编译原理的词法分析程序出问题?

ShallHurk 2016-05-19 14:08:39
package 第二章; import java.util.Scanner; public class 词法分析1  { public static char[] ch1= new char[100]; public static char[] ch=new char[20]; public static int[] c=new int[20]; public static String[] b; public static String str; public static String s; public static int count=0;   String[]str1={"abstract","boolean","break","base","case","catch",        "char","class","continue","default","do","double",         "else","extends","false","final","finally","float",        "for","if","implements","import","instanceof","int",        "interface","long","native","new","null","package",        "private","protected","public","return","short", "static",        "super","switch","synchronized","this","throw","throws",        "transient","try","true","void", "volatile","while"};   char[]ch2={'+','.','-','*','/','%','$','<','>'};   char[]ch3={'=',';',',',':','(',')','[',']','{','}'};   char[]ch4={'1','2','3','4','5','6','7','8','9','0'};   char[]ch5={'A','B','C','D','E','F','G','H','I','J','K',      'L','M','N','O','P','Q','R','S','T','U','V',      'W','X','Y','Z','a','b','c','d','e','f','g',      'h','i','j','k','l','m','n','o','p','q','r',      's','t','u','v','w','x','y','z','_'};   public static void main(String[] args)  {   System.out.println("请输入字符串:");   Scanner sc = new Scanner(System.in);   词法分析1 strin = new 词法分析1();  str = sc.nextLine();       b=str.split(" ");  for(int p=0;p<b.length;p++){  s=b[p];  ch1=s.toCharArray();  strin.Cstr1();       strin.Cch2();       strin.Cch3();       strin.Cch4();  }         }   public  void Cch2()   { for (int i = 0; i < ch1.length; i++) {   for (int j = 0; j < ch2.length;j++)   {    if(ch1[i]==ch2[j])    {   System.out.println(ch1[i] + " "+"ch2 "+" "+j+" "+"该字符为运算符"+"   ");    }   }     }   }      public void Cch3()   {   for (int m = 0; m <  ch1.length; m++)   {   for (int n = 0; n < ch3.length; n++)   {    if(ch1[m]==ch3[n])    {   System.out.println(ch1[m] + " "+"ch3 "+" "+n+" "+"该字符为界符"+"   ");    }   }       }   }    public void Cch4()   {   for (int k = 0; k < ch1.length; k++)   {   for (int l = 0; l < 10; l++)   {    if(ch1[k]==ch4[l])    {   System.out.println(ch1[k] + " "+"ch4"+" "+l+" "+"该字符为数字常量"+"   ");    }      }   } }      public boolean Nch2()   {   int r=0;   for(int m=0; m< ch1.length; m++)   { //   System.out.println(str.length());   for(int m2=0; m2<9; m2++)   {   if(ch1[m]==ch2[m2])   {   return false;   }   if(ch1[m]!=ch2[m2])   {   r++;    if(r==( ch1.length)*(ch2.length)) { return true; }   }     }   } return false;    }      public boolean Nch3()   {   int s=0;   for(int n=0; n< ch1.length; n++)   {   for(int n2=0; n2<ch3.length; n2++)   {   if(ch1[n]==ch3[n2])   {   return false;   }   if(ch1[n]!=ch3[n2])   {   s++;   if(s==( ch1.length)*(ch3.length))   {   return true;   }   }      }   } return false;   }       public int Cstr1()   {   for (int k1= 0; k1 <  b.length; k1++)   {   for(int k2=0;k2<str1.length;k2++)   {   if(b[k1].equals(str1[k2]))   {   System.out.println(str1[k2] + " "+"str1"+" "+k1+" "+"该单词为关键字"+"   "); // break;     return 0;   }   }      } for(int kk=0;kk<ch5.length;kk++)  { //           System.out.println(ch5[kk]);   if(ch1[0]==ch5[kk]&&Nch2()&&Nch3())       {   System.out.println(str+" "+"该单词为标识符"+"   ");           break;   }         }         return 0;    }   }各位大神好,上面是我的代码,出了点问题:当我输入表达式"if a+n=9 then a=0",程序应该输出{if str1 19 该单词为关键字   a  该单词为标识符+ ch2  0 该字符为运算符  n   该单词为标识符= ch3  0 该字符为界符   9 ch4 8 该字符为数字常量   then 该单词为标识符a  该单词为标识符= ch3  0 该字符为界符   0 ch4 9 该字符为数字常量},但是,运行以后却输出这样的:{if str1 0 该单词为关键字   if str1 0 该单词为关键字   + ch2  0 该字符为运算符   = ch3  0 该字符为界符   9 ch4 8 该字符为数字常量   if str1 0 该单词为关键字   if str1 0 该单词为关键字   = ch3  0 该字符为界符   0 ch4 9 该字符为数字常量},麻烦大神们帮我看看,谢谢了!   
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 1467 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信