public void makeParsTable(ParsTable parsTable) { StateNode stateTemp = first; ParsTableItem item; while(stateTemp != null) { StateExportNode stateExport = stateTemp.exports.Head; while(stateExport != null) { item.number=stateExport.data.distinationState; if(stateExport.data.isTerminal) { item.method=METHOD.S; } else { item.method=METHOD.G; } parsTable[stateTemp.StateNumber,stateExport.data.expStr]=item; stateExport = stateExport.next; } StateLawNode stateLaw = stateTemp.laws.Head; item.method=METHOD.R; while(stateLaw !=null) { if(stateLaw.data.IsDotEnded) { LawsNode law=parsHead.findLaw(stateLaw.data.lawNum); Stack follows=new Stack(); Stack checkedNonTerm= new Stack(); nonTerminals nonTerm = law.parts.Parent.Parent.NonTerminals; nonTerm.getFollow(law.parts.Parent.Parent.item.Name,follows,checkedNonTerm); item.number = stateLaw.data.lawNum; while(follows.Count !=0) { parsTable[stateTemp.StateNumber,follows.Pop().ToString()]=item; } } stateLaw = stateLaw.next; } stateTemp =stateTemp.next; } }
private void New_Click(object sender, System.EventArgs e) { if(saveConfirm(sender,e)) { this.content.Clear(); this.Text="New Grammer"; this.path=""; this.parsTable = null; this.parsHead = null; this.result.Items.Clear(); this.lstFirstFollow.Items.Clear(); } }
private void MakeStates_Click(object sender, System.EventArgs e) { try { result.Items.Clear(); parsHead=new ParsHead(); foreach(string s in content.Lines) parsHead.load(s); states=new State(parsHead); states.create(); parsTable=new ParsTable(states.StateCount,ParsHead.terminals,parsHead.Head,this.dgTabel); states.makeParsTable(this.parsTable); parsTable.showContents(result); PrintProductions(); tabControl1.SelectedIndex=2; parsTable.writeGrid(); SaveFileDialog saveDlg=new SaveFileDialog(); saveDlg.Filter="(*.prt)|*.prt"; if(saveDlg.ShowDialog()==DialogResult.OK) { StreamWriter sw = new StreamWriter(saveDlg.FileName); foreach (string s in result.Items) sw.WriteLine(s); sw.Close(); // parsTable.saveTo(sw); } } catch(Exception ex) { // MessageBox.Show(ex.Message); MessageBox.Show("Grammar is incorrect : please check your grammar , example : There is one NonTerminal in Right side that never apear in left side!!!"); } }