import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class ent_list /*To get the type of link between the concepts*/
{
	ArrayList<String> li=new ArrayList<String>();
	String name;
	String cas;
	public void addele(String e)
	{
		li.add(e);
	}
	public String getele(int i)
	{
		return (li.get(i));
	}
	public int getsize()
	{
		return li.size();
	}
	public void setname(String s)
	{
	 name=s;	
	}
	public void setcas(String z)
	{
		cas=z;
	}
}

class Parsing_types
{
	public static void main(String args[])
	{
		try
		{
		FileInputStream f=new FileInputStream("Schema_Parse_Entities.txt");
		FileInputStream f1=new FileInputStream("Schema_Parse_Types.txt");
		FileInputStream f2=new FileInputStream("ship_schema1.txt");
		FileInputStream f3=new FileInputStream("param.txt");
		FileOutputStream fo=new FileOutputStream("entities_in_types.txt");
		DataInputStream bf=new DataInputStream(f);
		DataInputStream bf1=new DataInputStream(f1);
		DataInputStream bf2=new DataInputStream(f2);
		DataInputStream bf3=new DataInputStream(f3);
		PrintStream ds=new PrintStream(fo);
		
		ArrayList<String> arr_list_entity=new ArrayList<String>();
		ArrayList<ent_list> xy=new ArrayList<ent_list>();
		ArrayList<String> arr_list_type=new ArrayList<String>();
		ArrayList<String> param=new ArrayList<String>();
		boolean type=false;
		boolean end_type=false;
		
		String str_tmp=" ";
		//ArrayList<Integer> arr_list1=new ArrayList<Integer>();
		//PrintStream ds=new PrintStream(fo);
		
		while(bf.available()>0)
		{
			
			String str=bf.readLine();
			str.trim();
			arr_list_entity.add(str); //adding to the entities array list
		
		}
		while(bf3.available()>0)
		{
			String str=bf3.readLine();
			str=str.trim();
			param.add(str); //adding to the parameters array list
		}
		while(bf1.available()>0)
		{
			
			String str=bf1.readLine();
			str.trim();
			arr_list_type.add(str); //adding to the types array list
		
		}
			
			while(bf2.available()>0) //reading the ship schema
			{
				String str=bf2.readLine();				
				Pattern pattern = Pattern.compile("^*TYPE");
				Pattern pattern2 = Pattern.compile("^*END_TYPE");
				Matcher matcher = pattern.matcher(str);
				Matcher matcher2=pattern2.matcher(str);
				
				if(matcher.find()) //matcher for start of a TYPE
				{
					type=true;
				}
				
				if(matcher2.find()) // matcher for end of a TYPE
				{
					type=false;
					end_type=false;
				}
				
				if(type&!end_type)// at the start of TYPE
				{
					str_tmp=str_tmp+str;
					
				}
				else
				{
					str_tmp=str_tmp.trim();
					int index=str_tmp.indexOf('=');
					if(index>0)
					{
						String h=str_tmp.substring(0,index);
						int index_space=h.indexOf(' ');
					String typename=h.substring(index_space);
					System.out.println(str_tmp);
					int left_brac=str_tmp.indexOf('(');
					int right_brac=str_tmp.indexOf(')');
					String attr="";
					String atr="";
					ent_list ko=new ent_list();
					ko.setname(typename);
				
					if(left_brac>0)
					{
						attr=str_tmp.substring(index+1,left_brac);
						System.out.println(attr);
						ko.setcas(attr);
						atr=str_tmp.substring(left_brac+1,right_brac);
						System.out.println(atr);
					}
					StringTokenizer sbr=new StringTokenizer(atr,",");
					while(sbr.hasMoreTokens())
					{
						String gh=sbr.nextToken();
						gh=gh.trim();
						System.out.println(gh);
						System.out.println(param.indexOf(gh));
						ko.addele(gh);
					}
					if(typename!=null)
					{
						System.out.println(typename);
						
					
					
						xy.add(ko);
					}
					}
					
					str_tmp=" ";
				}
				//System.out.println("I am here");
			}
			System.out.println(arr_list_entity.size());
			System.out.println("the parameters are");
			for(int jk=0;jk<param.size();jk++)
			{
				System.out.println(param.get(jk));
			}
			System.out.println("****************");
			for(int k=0;k<xy.size();k++)
			{
				//ds.println("");
				//ds.println(xy.get(k).name+":"+xy.get(k).cas);
				int param_index=param.indexOf(xy.get(k).name.trim())+8;
				System.out.println(xy.get(k).name);
				int id=0;
				
				for(int j=0;j<xy.get(k).getsize();j++)
				{
					//ds.print(xy.get(k).getele(j)+" ");
					int flag=1;
					String lm=new String(xy.get(k).getele(j).toString());
					//int ent_index=param.indexOf(new String(xy.get(k).getele(j)));
					if(param.indexOf(lm)<0)
						flag=2;
					int ent_index=param.indexOf(lm)+8;
					System.out.println(xy.get(k).getele(j));
					String df=(xy.get(k).cas).trim();
					System.out.println(param.indexOf(new String("action".toString())));
					if(param.contains(new String("action")))
					{
						System.out.println("yes");
					}
					if(df.equalsIgnoreCase("SELECT"))
					{
						id=7;
					}
					if(flag==1)
					{
					ds.println("e,"+id+","+param_index+","+ent_index);
					}
				}
				//ds.println("");
			}
			//for(int i=0;i<arr_list.size();i++)
			//{
				//System.out.println(arr_list.get(i));
			//}
		}catch(Exception e)		
		{
			System.err.println(e);
		}
	}
}
		