Berikut dicontohkan coding kompilasi dalam bentuk c++,
dengan aturan produksi sbb:
E -> TE'
E' -> *TE' | +TE | tanda epsilon
T -> FT'
T' -> +FT | taanda epsilon
F -> (E) (T) | id
dari tata bahasa diatas untuk memberikan predikat parser dibantu oleh dua fungsi yaitu fungsi FIRST dan FOLLOW yang membearkan untuk pengisian tabel predicative parser ....dst....
E -> TE'
E' -> *TE' | +TE | tanda epsilon
T -> FT'
T' -> +FT | taanda epsilon
F -> (E) (T) | id
dari tata bahasa diatas untuk memberikan predikat parser dibantu oleh dua fungsi yaitu fungsi FIRST dan FOLLOW yang membearkan untuk pengisian tabel predicative parser ....dst....
#include
<stdio.h>
#include
<string.h>
#include
<iostream.h>
int mulai(){
int jdata;
char *arrData[8];
char *arrData2[8];
char *arrHampa[8];
char *arrId[8];
char *arrFirst[8];
char *arrFollow[8];
int pilih;
printf ("silahkan pilih
salah satu dari tiga himpunan produksi dibawah ini:\n");
printf("===================================================================\n\n");
printf("1.
Q1:{1.E->TE',2.E'->+TE',3.E'->hampa,4.T->FT',5.T'->*FT',6.T'->hampa,7.F->(E),8.F->id}\n");
printf("...............................................................................\n"
);
printf("2.
Q2:(1.P->AB,2.P->CBA,3.A->aA,4.A->hampa,5.B->(a),6.C->cC}\n");
printf("...............................................................................\n"
);
printf("3.
Q3:{1.U->TS,,2.U->AS,3.T->+,4.T->-,5.T->hampa,6.S->idT,7.A->*}\n");
printf("...............................................................................\n"
);
printf("pilih himpunan
produksi (1 s/d 3):");
scanf("%d",&pilih);
if (pilih==1){
int jr=5;
int jc=6;
char arrPola[6]={'+','*','(',')','i','$'};
char arrCari[5]={'E','e','T','t','F'};
jdata=8;
char *arrHasil[6][5];
arrData[0]
="E->TE'";
arrData2[0]
="synch";
arrHampa[0]
="E->hampa";
arrId[0]="E->TE'";
arrFirst[0]="(i";
arrFollow[0]="$)";
arrData[1]
="E'->+TE'";
arrData2[1]
="synch";
arrHampa[1]
="E'->hampa";
arrId[1]="E'->id";
arrFirst[1]="+@";
arrFollow[1]="$)";
//arrData[2]
="E'->hampa";
arrFirst[2]="@";arrFollow[2]="$)";
arrData[2]
="T->FT'";
arrData2[2]
="synch";
arrHampa[2]
="T->hampa";
arrId[2]="T->FT'";
arrFirst[2]="(i";//id
arrFollow[2]="+$)";
arrData[3]
="T'->*FT'";
arrData2[3]
="synch";
arrHampa[3]
="T'->hampa";
arrId[3]="T'->id";
arrFirst[3]="*@";
arrFollow[3]="+$)";
//arrData[5]
="T'->hampa"; arrFirst[5]="@"; arrFollow[5]="+$)";
arrData[4]
="F->(E)";
arrData2[4]
="synch";
arrHampa[4]
="F ->hampa";
arrId[4]="F->id";
arrFirst[4]="(i";
arrFollow[4]="$)+*";
//arrData[7]
="F->id"; arrFirst[7]="i"; arrFollow[7]="$)+*";
char *dataQ="";
for
(int i=0;i<5;i++){
for
(int j=0;j<jc;j++){
//--------------------------------------------------------------------------------------------
dataQ="blank";
if(strchr(arrFirst[i],arrPola[j])>0){dataQ=arrData[i];}
if(strchr(arrFollow[i],arrPola[j])>0){dataQ=arrData2[i];}
if(strchr(arrFirst[i],'i')>0){if(strchr("i",arrPola[j])>0){dataQ=arrId[i];}}
if(strchr(arrFirst[i],'@')>0){if(strchr(arrFollow[i],arrPola[j])>0){dataQ=arrHampa[i];}}
printf("%i
%i =%s %c ==%s\n",i,j,arrFirst[i],arrPola[j],dataQ);
//--------------------------------------------------------------------------------------------
arrHasil[i][j]=dataQ;
}
printf("\n");
}
}
//--------------------------------------------------------------------------------------------------------------------------------
else if(pilih==2){
int jr=5;
int jc=5;
char
arrPola[5]={'a','(',')','c','$'};
char
arrCari[4]={'P','A','B','C'};
jdata=7;
char *arrHasil[5][4];
arrData[0]
="P->AB";
arrData2[0]="synch";
arrHampa[0]="P->hampa";
arrId[0]="P->CBA";
arrFirst[0]="ac";
arrFollow[0]="$";
//arrData[1]
="P->CBA"; arrFirst[1]="c@"; arrFollow[1]="$";
arrData[1]
="A->aA";
arrData2[1]="synch";
arrHampa[1]="A->hampa";
arrId[1]="A->id";
arrFirst[1]="a@";
arrFollow[1]="($";
//arrData[3]
="A->hampa";arrData2[3]="synch";arrFirst[3]="@";arrFollow[3]="($";
arrData[2]
="B->(a)";
arrData2[2]="synch";
arrHampa[2]="B->hampa";
arrId[2]="B->id";
arrFirst[2]="(";
arrFollow[2]="a$";
arrData[3]
="C->cC";
arrData2[3]="synch";
arrHampa[3]="C->hampa";
arrId[3]="C->id";
arrFirst[3]="c@";
arrFollow[3]="(";
//arrData[6]
="C->hampa";arrData2[6]="synch";arrFirst[6]="@";arrFollow[6]="(";
char *dataQ="";
for
(int i=0;i<4;i++){
for
(int j=0;j<jc;j++){
//--------------------------------------------------------------------------------------------
dataQ="blank";
if(strchr(arrFirst[i],arrPola[j])>0){dataQ=arrData[i];}
if(strchr(arrFollow[i],arrPola[j])>0){dataQ=arrData2[i];}
if(strchr(arrFirst[i],'c')>0){if(strchr("c",arrPola[j])>0){dataQ=arrId[i];}}
if(strchr(arrFirst[i],'@')>0){if(strchr(arrFollow[i],arrPola[j])>0){dataQ=arrHampa[i];}}
printf("%i %i =%s %c
==%s\n",i,j,arrFirst[i],arrPola[j],dataQ);
//--------------------------------------------------------------------------------------------
arrHasil[i][j]=dataQ;
}
printf("\n");
}
}
//------------------------------------------------------------------------------------------------
else if(pilih==3){
int jr=5;
int jc=5;
char
arrPola[5]={'+','-','i','*','$'};
char
arrCari[4]={'U','A','T','S'};
jdata=7;
char *arrHasil[5][4];
arrData[0]
="U->TS";
arrData2[0]="synch";
arrHampa[0]="U->hampa";
arrId[0]="U->AS";
arrFirst[0]="+-*";
arrFollow[0]="$";
//arrData[1]
="U->AS";arrData2[1]="synch";arrFirst[1]="*";arrFollow[1]="$";
arrData[1]
="T->+";
arrData2[1]="synch";
arrHampa[1]="T->hampa";
arrId[1]="T->-";
arrFirst[1]="+-@";
arrFollow[1]="i$";
/* arrData[3]
="T->-";
arrData2[3]="synch";
arrFirst[3]="-";
arrFollow[3]="i$";
arrData[4]
="T->hampa";
arrData2[4]="synch";
arrFirst[4]="@";
arrFollow[4]="i$"; */
arrData[2]
="A->*";
arrData2[2]="synch";
arrHampa[2]="A->hampa";
arrId[2]="A->id";
arrFirst[2]="*";
arrFollow[2]="i";
arrData[3]
="S->idT";
arrData2[3]="synch";
arrHampa[3]="S->hampa";
arrId[3]="S->id";
arrFirst[3]="i";
arrFollow[3]="$";
char
*dataQ="";
for
(int i=0;i<4;i++){
for
(int j=0;j<jc;j++){
//--------------------------------------------------------------------------------------------
dataQ="blank";
if(strchr(arrFirst[i],arrPola[j])>0){dataQ=arrData[i];}
if(strchr(arrFollow[i],arrPola[j])>0){dataQ=arrData2[i];}
if(strchr(arrFirst[i],'-')>0){if(strchr("-",arrPola[j])>0){dataQ=arrId[i];}}
//t-
if(strchr(arrFirst[i],'@')>0){if(strchr(arrFollow[i],arrPola[j])>0){dataQ=arrHampa[i];}}
printf("%i
%i =%s %c ==%s\n",i,j,arrFirst[i],arrPola[j],dataQ);
//--------------------------------------------------------------------------------------------
arrHasil[i][j]=dataQ;
}
printf("\n");
}
}
for(int i=0;i<jdata;i++){
// printf("%s\n",arrData[i]);
//printf("First
=%s\n",arrFirst[i]);
//printf("Follow
=%s\n",arrFollow[i]);
}
mulai();
return jdata;
}
//=====================================================================
int main(){
mulai();
return 0;
}
Tidak ada komentar:
Posting Komentar