Sabtu, 27 September 2014

Bahasa C++ untuk Teknik Kompilasi




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....
 
#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