实验结果:
实验源代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;;
public class Chomsky { String[] left=new String[10]; //产生式左部 String[] right=new String[10]; //产生式右部 String Vn=new String(); //非终结符集合 String Vt=new String(); //终结符集合 int[] type=new int[20]; //标记文法的类型 char start; //开始符 int count; //产生式的个数 boolean mark1=true,mark2=true; public void GetIn(BufferedReader f) //输入方法 { try
6
{
boolean mark=true;
System.out.println(\实验一:Chomsky文法类型判断||\\n\System.out.println(\请输入非终结符集Vn:\Vn=f.readLine();
System.out.println(\请输入终结符集Vt:\Vt=f.readLine(); String V=Vn+Vt;
System.out.println(\请输入产生式的个数:\String s=f.readLine(); count=Integer.parseInt(s);
for(int i=0;i if(mark==false) { System.out.println(\产生式左部皆为终结符号,输入非法!\ System.exit(0); } for(int i=0;i 7 { if((IsVh(right[i],V))==false) { System.out.println(\输入非法!\ System.exit(0); } } } System.out.println(\请输入开始符:\ start=(char)f.read(); for(int i=0;i public void OutPut() //输出方法 { 8 System.out.println(\生成的文法G为:\ System.out.print(\ for(int i=0;i public void Recognize() //判别方法 { for(int i=0;i 9 type[i]=2; mark2=false; } if(right[i].length()==2&&mark2==true) { if(IsChar(right[i].charAt(0),Vn)&&IsChar(right[i].charAt(1),Vt)) type[i]=3; else type[i]=2; mark1=false; } } else type[i]=1; } else type[i]=0; } int min=type[0]; for(int i=1;i public boolean IsVh(String str,String Vh) //判断字符串是否在某个集合中 { for(int j=0;j public boolean IsChar(char c,String Vh) //判断字符是否在某个集合中 { 10 } for(int k=0;k public static void main(String args[]) { Chomsky Cho=new Chomsky(); BufferedReader f=new BufferedReader(new InputStreamReader (System.in)); Cho.GetIn(f); } 11