Смекни!
smekni.com

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

|- 11 32 23 19 38 39
Or 32 23 18
<= 10 32 23 19
>= 9 32 23 19
> 7 32 23 19
< 6 32 23 19
<> 8 32 23 19
= 5 32 23 19
And 31 23
Mod 30 23
Div 29 23
/ 28 23
* 27 23
- 34 2 32 23 13 17
+ 33 1 32 23 12 16
, 11 32 23 19 37
I 35 3 25 20 14
) 11 32 23 24 19 38
( 36 4 26 21 22 15
S B B’ C C’ M M’ M1 П П’ S’ #

Пример работы программы

Ввели выражение на языке СИ:

КУРСОВАЯ РАБОТА ПО ЯПМТ

Выберете язык: 1 - СИ&bsol;СИ++ 2 - Turbo Pascal 7.0

1

Напишите выражение на языке С:

(e+e==7)

Дескрипторный текст:

0 2 9 2 16 2 1

Заменить(S',В2) Сдвиг

Заменить(C,В1) Сдвиг

Заменить(В',В) Сдвиг

Заменить(В1) Сдвиг

Заменить(В',В) Сдвиг

Заменить(В1) Сдвиг

Вытолкнуть Держать

Вытолкнуть Держать

Вытолкнуть Держать

Заменить(В') Сдвиг

Вытолкнуть Держать

Вытолкнуть Держать

ДОПУСТИТЬ

Выходная лента:

55 12 25 1 31 1 37 53 53 13 53 59 60

Ввели не выражение:

КУРСОВАЯ РАБОТА ПО ЯПМТ

Выберете язык: 1 - СИ&bsol;СИ++ 2 - Turbo Pascal 7.0

1

Напишите выражение на языке С:

t+

Дескрипторный текст:

2 9

Заменить(S',В1) Сдвиг

Заменить(В',В) Сдвиг

Отвергнуть

Выходная лента:

54 25 0

Ввели выражение на Паскале:

КУРСОВАЯ РАБОТА ПО ЯПМТ

Выберете язык: 1 - СИ&bsol;СИ++ 2 - Turbo Pascal 7.0

2

Напишите выражение на языке TP:

ww=s+1

Дескрипторный текст:

2 11 2 4 2

Заменить(В'П'C'M') Сдвиг

Вытолкнуть Держать

Вытолкнуть Держать

Вытолкнуть Держать

Заменить(П) Сдвиг

Заменить(П'C'M') Сдвиг

Вытолкнуть Держать

Вытолкнуть Держать

Заменить(П'C) Сдвиг

Заменить(C'M') Сдвиг

Вытолкнуть Держать

Вытолкнуть Держать

Вытолкнуть Держать

ДОПУСТИТЬ

Выходная лента:

3 23 32 19 5 14 23 32 16 25 23 32 19 39

Ввели не выражение

КУРСОВАЯ РАБОТА ПО ЯПМТ

Выберете язык: 1 - СИ&bsol;СИ++ 2 - Turbo Pascal 7.0

2

Напишите выражение на языке TP:

f=s+

Дескрипторный текст:

2 11 2 4

Заменить(В'П'C'M') Сдвиг

Вытолкнуть Держать

Вытолкнуть Держать

Вытолкнуть Держать

Заменить(П) Сдвиг

Заменить(П'C'M') Сдвиг

Вытолкнуть Держать

Вытолкнуть Держать

Заменить(П'C) Сдвиг

Отвергнуть

Выходная лента:

3 23 32 19 5 14 23 32 16 0

Листинг программы:

#include<stdio.h>

#include<conio.h>

#define n 100

#define t 17

#define m 53

#define g 11

char s1[n],s[n],a[n];

int j=0,h,vl[n],y=0;

/*---------------------------ВВОД ВЫРАЖЕНИЯ------------------------------*/

int vvod()

{

int i;

printf("&bsol;t&bsol;t&bsol;tКУРСОВАЯ РАБОТА ПО ЯПМТ&bsol;n");

printf("Выберете язык: 1 - СИ&bsol;СИ++ 2 - Turbo Pascal 7.0&bsol;n");

scanf("%d",&y);

if(y==1)

printf("Напишите выражение на языке С:&bsol;n");

{for(i=0;i<=n-1;i++)

{

scanf("%c",&s1[i]);

if (s1[i]=='&bsol;n'){j=i;break;}

}

}

if(y==2)

printf("Напишите выражение на языке TP:&bsol;n");

{for(i=0;i<=n-1;i++)

{

scanf("%c",&s1[i]);

if (s1[i]=='&bsol;n'){j=i;break;}

}

}

return y;

};

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

/*--------------------------ИНДИФИКАТОР----------------------------------*/

int perem(int be,int l)

{

int i,j,k,d(0),i1,d1=0,z(0),chiclo(0),di(0);

char b[m]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o',

'p','q','r','s','t','u','v','w','x','y','z','A','B','C','D',

'F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T',

'U','V','W','X','W','Z','E','_'};

char c[g]={'1','2','3','4','5','6','7','8','9','0','.'};

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

{

if(s1[be]==b[j]) {d=1;break;}

}

if(d==1)

{

for(i=be+1;i<=l;i++)

{

d=0;

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

{

if(s1[i]==b[j]) {d=1;break;}

}

if (d==0)

{

d1=0;

for(k=0;k<=g-1;k++)

{

if(s1[i]==c[k]) {d1=1;break;}

}

if(d1==0)break;

}

}

}

chiclo=0;

for(i=be;i<=l;i++)

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

{

if(s1[i]==c[j]) {chiclo=chiclo++;break;}

}

if(d1==1||d==1||chiclo==l-be+1&&z==0) {z=1;/*printf("DA");*/} else {z=0;/*printf("NET");*/}

return z;

};

/*--------------------КОНЕЦ ИНДИФИКАТОРА---------------------------------*/

/*--------------------------LL(1) - АНАЛИЗАТОР-----------------------------*/

int analiz()

{

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

int tab[12][29]={{55,0,54,0,57,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{11,0,1,0,21,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{9,37,0,0,8,7,22,23,24,25,26,28,27,30,29,32,31,34,33,35,0,0,2,3,4,5,6,52,37},

{14,0,12,18,17,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,0},

{0,53,0,0,0,0,38,39,40,41,42,44,43,45,46,48,47,50,49,51,0,53,0,0,0,0,0,0,53},

{0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,0,0,0,0,0,0,59},

{0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60}};

printf("&bsol;n");

z1=0;

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

v=0;j=0;

do

{

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

{

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

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

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

printf("&bsol;tЗаменить(В',В)&bsol;tСдвиг&bsol;n");vl[j]=2;break;

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

printf("&bsol;tЗаменить(В',В)&bsol;tСдвиг&bsol;n");vl[j]=3;break;

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

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

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

printf("&bsol;tЗаменить(В',В)&bsol;tСдвиг&bsol;n");vl[j]=5;break;

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

printf("&bsol;tЗаменить(В',В)&bsol;tСдвиг&bsol;n");vl[j]=8;break;

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

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

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

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

case 9: z[z1]=10;z1++;z[z1]=0;v++;

printf("&bsol;tЗаменить(S1,S)&bsol;tСдвиг&bsol;n");vl[j]=9;break;

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

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

case 11: z[z1]=3;v++;

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

case 12: z[z1]=6;z1++;z[z1]=2;v++;

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

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

printf("&bsol;tЗаменить(В')&bsol;tСдвиг&bsol;n");vl[j]=13;break;

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

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

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

printf("&bsol;tЗаменить(C,C1)&bsol;tСдвиг&bsol;n");vl[j]=15;break;

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

printf("&bsol;tЗаменить(В')&bsol;tСдвиг&bsol;n");vl[j]=16;break;

case 17: z[z1]=6;z1++;z[z1]=7;v++;

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

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

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

case 19: z[z1]=5;z1++;z[z1]=1;v++;

printf("&bsol;tЗаменить(В',В)&bsol;tСдвиг&bsol;n");vl[j]=19;break;

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

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