Context Free Grammer (CFG)/Bahasa Bebas Konteks adalah sebuah tata bahasa dimana tidak terdapat pembatasan pada hasil produksinya,contoh pada aturan produksi: α → β
Pada program ini
menggunakan teknik parsing yang mana berguna untuk menggambarkan simbol-simbol variabel menjadi simbol-simbol
terminal setiap simbol variabel akan diturunkan
menjadi terminal sampai tidak ada yang belum
tergantikan.
Tujuan dari program
ini yakni mencari untaian dengan asumsi "Diterima" atau "Tidak diterima".
unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, Buttons, Grids;Label2: TLabel;Label3: TLabel;Label4: TLabel;GroupBox2: TGroupBox;Label5: TLabel;Edit1: TEdit;BitBtn1: TBitBtn;GroupBox3: TGroupBox;GroupBox4: TGroupBox;StringGrid1: TStringGrid;BitBtn2: TBitBtn;Edit2: TEdit;GroupBox5: TGroupBox;Label6: TLabel;Label7: TLabel;Label8: TLabel;Label9: TLabel;Label11: TLabel;Label12: TLabel;Label10: TLabel;procedure FormCreate(Sender: TObject);procedure BitBtn1Click(Sender: TObject);procedure BitBtn2Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);beginlistbox1.Visible:=false;listbox2.Visible:=false;edit2.Visible :=false;end;procedure TForm1.BitBtn1Click(Sender: TObject);var untai,isi,temp1,temp2,hasil:string;a,b,x,y,n,i,j,k,jml,jawab:integer;untai1,untai2:string;temp:array [1..100]of string;beginedit2.Visible :=true;untai:=edit1.Text;n:=length(untai);stringgrid1.ColCount:=n+1;stringgrid1.RowCount:=n+1;stringgrid1.FixedCols:=1;stringgrid1.FixedRows:=1;for i:=1 to n dobeginstringgrid1.Cells[i,0]:=untai[i];for y"MsoNormal"> for i:=1 to (n-j+1) dobeginfor k:=1 to (j-1) dobeginuntai1:=StringGrid1.Cells[i,k];untai2:=Stringgrid1.cells[i+k,j-k];jml:=0;for a:=1 to length(untai1) dofor b:=1 to length(untai2) dobegininc(jml);temp[jml]:=untai1[a]+untai2[b];end;for a:=1 to jml dofor b:=0 to listbox2.Count-1 doif (temp[a]=listbox2.Items[b]) thenbeginif (StringGrid1.Cells[i,j]='') thenStringGrid1.Cells[i,j]:=listbox1.Items[b]elsebeginisi:=StringGrid1.Cells[i,j];for x:=1 to length(isi) doif (listbox1.Items[b]=isi[x]) thentemp2:=listbox1.Items[b]elsetemp1:=listbox1.Items[b];if temp1<>temp2 thenStringGrid1.Cells[i,j]:=StringGrid1.Cells[i,j]+temp1;end;end;end;if stringgrid1.Cells[i,j]='' thenbeginstringgrid1.Cells[i,j]:='@';end;end;end;end;}end;hasil:=stringgrid1.Cells[1,n];end;//until i=n;{ if ((jawab=0) and (edit2.Text='')) thenbeginedit2.Text:=' Tidak Diterima ';end; }end;procedure TForm1.BitBtn2Click(Sender: TObject);beginapplication.Terminate;p; label6.Caption:=' Diterima ';endelsebeginlabel6.Visible:=true;label6.Caption:=' Tidak Diterima ';end;end;}end;hasil:=stringgrid1.Cells[1,n];i:=1;for i:=0 to length(hasil) dobeginif (hasil[i]=listbox1.Items[1]) thenbeginedit2.Text:=' Diterima ';end; }end;procedure TForm1.BitBtn2Click(Sender: TObject);beginapplication.Terminate;sp; //inc(i);end;//until i=n;{ if ((jawab=0) and (edit2.Text='')) thenbeginedit2.Text:=' Tidak Diterima ';end; }end;procedure TForm1.BitBtn2Click(Sender: TObject);beginapplication.Terminate;end;end.