Конвертер программы с подмножества языка Си в Паскаль с использованием LL(1) метода синтаксического анализа (выражения)

Доклад - Компьютеры, программирование

Другие доклады по предмету Компьютеры, программирование

};

/*---------------------КОНЕЦ ДЕСКРИПТОРНОГО ТЕКСТА--------------------------*/

 

int lexica1()

{ int di(0),q(0),w(0),i1,i;

i=0;

printf("Дескрипторный текст:\n");

do

{

di=termin(s1[i]);

if(di==1)

{

switch(s1[i])

{

case (: a[w]=0;break;

case ): a[w]=1;break;

case *: a[w]=6;break;

case /: a[w]=7;break;

case =: a[w]=11;break;

case >: if(s1[i+1]===){a[w]=15;i++;}else a[w]=14;break;

case <: if(s1[i+1]===){a[w]=16;i++;}else a[w]=13;break;

case +: a[w]=4;break;

case -: a[w]=5;break;

case ,: a[w]=3;break;

case d: if(s1[i+1]==i&&s1[i+2]==v)a[w]=8;i++;i++;break;

case m: if(s1[i+1]==o&&s1[i+2]==d)a[w]=9;i++;i++;break;

case a: if(s1[i+1]==n&&s1[i+2]==d)a[w]=10;i++;i++;break;

case o: if(s1[i+1]==r)a[w]=17;i++;break;

}

i++;

}

else

{

i1=i;

while(di!=1)

{

i++;

di=termin(s1[i]);

}

q=perem(i1,i-1);

if(q==1)a[w]=2;else

{printf("ERROR.\nЛЕКСИЧЕСКАЯ ОШИБКА");break;}

}

printf("%d ",a[w]);

w++;

}

while(s1[i]!=\n);

a[w]=18;

};

 

int analiz1()

{

int z[10],v,z1,i(0),j,k;

int tab[12][19]={{36,0,35,0,33,34,0,0,0,0,0,0,0,0,0,0,0,0,0},

{4,0,3,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,11,0,11,0,0,0,0,0,0,0,5,8,6,7,9,10,0,11},

{26,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,32,0,32,32,32,27,28,29,30,31,32,32,32,32,32,32,32,32},

{21,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{22,23,0,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23},

{0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{15,0,14,0,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,19,0,19,16,17,0,0,0,0,0,19,19,19,19,19,19,18,19},

{0,38,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38},

{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39}};

printf("\n");

z1=0;

z[z1]=11;z1++;z[z1]=1;

v=0;j=0;

do

{

switch(tab[z[z1]][a[v]])

{

case 1: z[z1]=2;z1++;z[z1]=9;z1++;z[z1]=3;v++;

printf("\tЗаменить(ВПC)\tСдвиг\n");vl[j]=1;break;

case 2: z[z1]=2;z1++;z[z1]=9;z1++;z[z1]=3;v++;

printf("\tЗаменить(ВПC)\tСдвиг\n");vl[j]=2;break;

case 3: z[z1]=2;z1++;z[z1]=9;z1++;z[z1]=4;z1++;z[z1]=6;v++;

printf("\tЗаменить(ВПCM)\tСдвиг\n");vl[j]=3;break;

case 4: z[z1]=2;z1++;z[z1]=9;z1++;z[z1]=4;z1++;z[z1]=7;z1++;z[z1]=1;v++;

printf("\tЗаменить(ВПCM1,B)\tСдвиг\n");vl[j]=4;break;

case 5: z[z1]=8;v++;

printf("\tЗаменить(П)\tСдвиг\n");vl[j]=5;break;

case 6: z[z1]=8;v++;

printf("\tЗаменить(П)\tСдвиг\n");vl[j]=6;break;

case 7: z[z1]=8;v++;

printf("\tЗаменить(П)\tСдвиг\n");vl[j]=7;break;

case 8: z[z1]=8;v++;

printf("\tЗаменить(П)\tСдвиг\n");vl[j]=8;break;

case 9: z[z1]=8;v++;

printf("\tЗаменить(П)\tСдвиг\n");vl[j]=9;break;

case 10:z[z1]=8;v++;

printf("\tЗаменить(П)\tСдвиг\n");vl[j]=10;break;

case 11:z1--;

printf("\tВытолкнуть\tДержать\n");vl[j]=11;break;

case 12:z[z1]=9;z1++;z[z1]=3;v++;

printf("\tЗаменить(ПC)\tСдвиг\n");vl[j]=12;break;

case 13:z[z1]=9;z1++;z[z1]=3;v++;

printf("\tЗаменить(ПC)\tСдвиг\n");vl[j]=13;break;

case 14:z[z1]=9;z1++;z[z1]=4;z1++;z[z1]=6;v++;

printf("\tЗаменить(ПCM)\tСдвиг\n");vl[j]=14;break;

case 15:z[z1]=9;z1++;z[z1]=4;z1++;z[z1]=7;v++;

printf("\tЗаменить(ПCM1,B)\tСдвиг\n");vl[j]=15;break;

case 16:z[z1]=9;z1++;z[z1]=3;v++;

printf("\tЗаменить(ПC)\tСдвиг\n");vl[j]=16;break;

case 17:z[z1]=9;z1++;z[z1]=3;v++;

printf("\tЗаменить(ПC)\tСдвиг\n");vl[j]=17;break;

case 18:z[z1]=9;z1++;z[z1]=3;v++;

printf("\tЗаменить(ПC)\tСдвиг\n");vl[j]=18;break;

case 19:z1--;

printf("\tВытолкнуть\tДержать\n");vl[j]=19;break;

case 20:z[z1]=6;v++;

printf("\tЗаменить(M)\tСдвиг\n");vl[j]=20;break;

case 21:z[z1]=7;z1++;z[z1]=1;v++;

printf("\tЗаменить(M1,B)\tСдвиг\n");vl[j]=21;break;

case 22:z[z1]=7;z1++;z[z1]=0;v++;

printf("\tЗаменить(M1,S)\tСдвиг\n");vl[j]=22;break;

case 23:z1--;

printf("\tВытолкнуть\tДержать\n");vl[j]=23;break;

case 24:z1--;v++;

printf("\tВытолкнуть\tСдвиг\n");vl[j]=24;break;

case 25:z[z1]=4;z1++;z[z1]=6;v++;

printf("\tЗаменить(CM)\tСдвиг\n");vl[j]=25;break;

case 26:z[z1]=4;z1++;z[z1]=6;z1++;z[z1]=1;v++;

printf("\tЗаменить(CMB)\tСдвиг\n");vl[j]=26;break;

case 27:z[z1]=4;z1++;z[z1]=6;v++;

printf("\tЗаменить(CM)\tСдвиг\n");vl[j]=27;break;

case 28:z[z1]=4;z1++;z[z1]=6;v++;

printf("\tЗаменить(CM)\tСдвиг\n");vl[j]=28;break;

case 29:z[z1]=4;z1++;z[z1]=5;v++;

printf("\tЗаменить(CM)\tСдвиг\n");vl[j]=29;break;

case 30:z[z1]=4;z1++;z[z1]=5;v++;

printf("\tЗаменить(CM)\tСдвиг\n");vl[j]=30;break;

case 31:z[z1]=4;z1++;z[z1]=5;v++;

printf("\tЗаменить(CM)\tСдвиг\n");vl[j]=31;break;

case 32:z1--;

printf("\tВытолкнуть\tДержать\n");vl[j]=32;break;

case 33:z[z1]=10;z1++;z[z1]=2;z1++;z[z1]=9;z1++;z[z1]=3;v++;

printf("\tЗаменить(SBПС)\tСдвиг\n");vl[j]=33;break;

case 34:z[z1]=10;z1++;z[z1]=2;z1++;z[z1]=9;z1++;z[z1]=3;v++;

printf("\tЗаменить(SBПС)\tСдвиг\n");vl[j]=34;break;

case 35:z[z1]=10;z1++;z[z1]=2;z1++;z[z1]=9;z1++;z[z1]=4;z1++;z[z1]=6;v++;

printf("\tЗаменить(SBПСM)\tСдвиг\n");vl[j]=35;break;

case 36:z[z1]=2;z1++;z[z1]=9;z1++;z[z1]=4;z1++;z[z1]=7;z1++;z[z1]=1;v++;

printf("\tЗаменить(BПСM1,B)\tСдвиг\n");vl[j]=36;break;

case 37:z[z1]=0;v++;

printf("\tЗаменить(S)\tСдвиг\n");vl[j]=37;break;

case 38:z1--;

printf("\tВытолкнуть\tДержать\n");vl[j]=38;break;

case 39: printf("ДОПУСТИТЬ\n");i=1;vl[j]=39;break;

case 0: printf("Отвергнуть\n");i=2;vl[j]=0;break;

}

if(i==1|i==2)break;else j++;

}

while(tab[z[z1]][a[v]]!=0||tab[z[z1]][a[v]]!=39);

printf("Выходная лента:\n");

for(k=0;k<=j;k++)

{

printf("%d ",vl[k]);

}

return i;

};

/*--------------------------УДАЛЕНИЕ ПРОБЕЛОВ---------------------------------------*/

/*int probel()

{

int i(0),k(0);

for(i=0;i<=j-1;i++)

{

if(s[i]!= ){s1[k]=s[i];k++;}

}

j=k;

};*/

/*-------------------------------------------------------------------------*/

int main()

{

int w,i;

clrscr();

//probel();

y=vvod();

w=0;

a[w]=0;

if(y==1)

{lexica();

i=analiz();}

if(y==2)

{

lexica1();

i=analiz1();

}

getch();

return 0;

}