//Student Name: Pranith Reddy Kadaru //Instructor: Dr. Christel Kemke //this program implements the Earley parser. This program reads the file containing the grammer //and the sentence to be parsed and generates the Earley chart and the parse tree import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.UIManager; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeSelectionModel; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import java.net.URL; import java.io.IOException; import java.awt.Dimension; import java.awt.GridLayout; import javax.swing.tree.TreePath; import java.util.*; import java.io.*; import java.lang.*; import java.awt.Rectangle; //each rule in a chart class rules { int dot; //position of dot int start; //starting position int end; //ending position int rno; //rule number Vector rule; //vector to store the rule Vector pointer; //vector to store the pointer to previous rule char ch; public rules() //constructor { rule=new Vector(); pointer=new Vector(); }//endrules constructor public rules(int i,int j,int k, String s,char c) //constructor { String sep[]=s.split(" "); dot=i; start=j; end=k; rule=new Vector(); pointer=new Vector(); for(int m=0;m "); Vector grammerrule=new Vector(); if(tempgrammer1[1].indexOf('&')!=-1) { String tempgrammer2[]=tempgrammer1[1].split(" & "); for(int u=0;u"))|(tempgrammer3[u].equals("&"))) { }//endif else { terminals.addElement(tempgrammer3[u]); }//endelseif }//endelseif }//endwhile for(int s=0;s"))|(tempstr[k].equals("&"))) { }//endif else { if(terminals.contains(tempstr[k])) { }//endif else { flag=1; }//endelseif }//endelseif }//endfor }//endfor if(flag==0) { pos.addElement(nonterminals.elementAt(i)); }//endif }//endfor for(int i=0;i"; for(int z=1;z0) { for(int z=0;z=0;y--) { flag=1; n.pointers.addElement(tree(((Integer)temprule.pointer.elementAt(y)).intValue())); }//endfor if(flag==0) { n.pointers.addElement(new node((String)temprule.rule.elementAt(1))); }//endif return n; }//endif }//endfor }//endfor return new node(); }//end tree //create the nodes in the parsetree public DefaultMutableTreeNode createNodes(DefaultMutableTreeNode top,node n) { top=new DefaultMutableTreeNode(n.name); if(n.pointers.size()>0) { for(int x=0;x