|- | 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 - СИ\СИ++ 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 - СИ\СИ++ 2 - Turbo Pascal 7.0
1
Напишите выражение на языке С:
t+
Дескрипторный текст:
2 9
Заменить(S',В1) Сдвиг
Заменить(В',В) Сдвиг
Отвергнуть
Выходная лента:
54 25 0
Ввели выражение на Паскале:
КУРСОВАЯ РАБОТА ПО ЯПМТ
Выберете язык: 1 - СИ\СИ++ 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 - СИ\СИ++ 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("\t\t\tКУРСОВАЯ РАБОТА ПО ЯПМТ\n");
printf("Выберете язык: 1 - СИ\СИ++ 2 - Turbo Pascal 7.0\n");
scanf("%d",&y);
if(y==1)
printf("Напишите выражение на языке С:\n");
{for(i=0;i<=n-1;i++)
{
scanf("%c",&s1[i]);
if (s1[i]=='\n'){j=i;break;}
}
}
if(y==2)
printf("Напишите выражение на языке TP:\n");
{for(i=0;i<=n-1;i++)
{
scanf("%c",&s1[i]);
if (s1[i]=='\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("\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("\tЗаменить(В1)\tСдвиг\n");vl[j]=1;break;
case 2: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=2;break;
case 3: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=3;break;
case 4: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=4;break;
case 5: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=5;break;
case 6: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=8;break;
case 7: z[z1]=5;v++;
printf("\tЗаменить(В')\tСдвиг\n");vl[j]=7;break;
case 8: z[z1]=5;v++;
printf("\tЗаменить(В')\tСдвиг\n");vl[j]=8;break;
case 9: z[z1]=10;z1++;z[z1]=0;v++;
printf("\tЗаменить(S1,S)\tСдвиг\n");vl[j]=9;break;
case 10: z[z1]=5;v++;
printf("\tЗаменить(В')\tСдвиг\n");vl[j]=10;break;
case 11: z[z1]=3;v++;
printf("\tЗаменить(В2)\tСдвиг\n");vl[j]=11;break;
case 12: z[z1]=6;z1++;z[z1]=2;v++;
printf("\tЗаменить(C,В1)\tСдвиг\n");vl[j]=12;break;
case 13: z[z1]=5;v++;
printf("\tЗаменить(В')\tСдвиг\n");vl[j]=13;break;
case 14: z[z1]=6;z1++;z[z1]=3;v++;
printf("\tЗаменить(C,В2)\tСдвиг\n");vl[j]=14;break;
case 15: z[z1]=6;z1++;z[z1]=7;v++;
printf("\tЗаменить(C,C1)\tСдвиг\n");vl[j]=15;break;
case 16: z[z1]=5;v++;
printf("\tЗаменить(В')\tСдвиг\n");vl[j]=16;break;
case 17: z[z1]=6;z1++;z[z1]=7;v++;
printf("\tЗаменить(C,C1)\tСдвиг\n");vl[j]=17;break;
case 18: z[z1]=8;v++;
printf("\tЗаменить(C2)\tСдвиг\n");vl[j]=18;break;
case 19: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=19;break;
case 20: z[z1]=7;v++;
printf("\tЗаменить(C1)\tСдвиг\n");vl[j]=20;break;