#include <stdio.h>
#include <string.h>
int ddd (char a[100],int i)
{
Switch (A[i])
{
Case ' + ': Case '-': Case ' * ': Case '/': case ' = ': Case ', ': Case ' (': Case ') ':
{
return (1);
}
Case ': ':
{
if (a[i+1]== ' = ')
{
return (2);
}
Else
return (1);
}
Case ' < ':
{
if (a[i+1]== ' > ')
{
return (2);
}
else if (a[i+1]== ' = ')
{
return (2);
}
Else
return (1);
}
Case ' > ':
{
if (a[i+1]== ' = ')
{
return (2);
}
Else
return (1);
}
Default
return (0);
Break
}
}
int CCC (char a[100],int i)
{
Switch (A[i])
{
Case ' + ':
{
printf ("(13,+)");
return (1);
}
Case '-':
{
printf ("(14,-)");
return (1);
}
Case ' * ':
{
printf ("(15,*)");
return (1);
}
Case '/':
{
printf ("(16,/)");
return (1);
}
Case ': ':
{
if (a[i+1]== ' = ')
{
printf ("(18,:=)");
return (2);
}
Else
printf ("(N,:)");
return (1);
}
Case ' < ':
{
if (a[i+1]== ' > ')
{
printf ("(21,<>)");
return (2);
}
else if (a[i+1]== ' = ')
{
printf ("(22,<=)");
return (2);
}
Else
printf ("(20,<)";
return (1);
}
Case ' > ':
{
if (a[i+1]== ' = ')
{
printf ("(24,>=)");
return (2);
}
Else
printf ("(23,>)";
return (1);
}
Case ' = ':
{
printf ("(25,=)");
return (1);
}
Case '; ':
{
printf ("(;))";
return (1);
}
Case ' (':
{
printf ("(27, ()");
return (1);
}
Case ') ':
{
printf ("(28,)");
return (1);
}
Default
return (0);
Break
}
}
void number (char a[10])
{
int i=0;
Char text[10];
while (a[i]!= ')
{
Text[i]=a[i];
i++;
}
text[i]= ' + ';
printf ("(11,%s)", text);
}
void Fing (char a[10])
{
int i=0;
Char text[10];
while (a[i]!= ')
{
Text[i]=a[i];
i++;
}
text[i]= ' + ';
if (strcmp (text, "Begin") ==0)
{
printf ("(1,begin)");
}
else if (strcmp (text, "if") ==0)
{
printf ("(2,if)");
}
else if (strcmp (text, "then") ==0)
{
printf ("(3,then)");
}
else if (strcmp (text, "while") ==0)
{
printf ("(4,while)");
}
else if (strcmp (text, "do") ==0)
{
printf ("(5,do)");
}
else if (strcmp (text, "End") ==0)
{
printf ("(6,end)");
}
Else
{
printf ("(10,%s)", text);
}
}
Main () {
int i=0,j=-1,l=0,x=0;
Char a[100],text[10];
printf ("Input source program, end with #");
Gets (a);
while (1)
{
if (a[i]>= ' 0 ' &&a[i]<= ' 9 ')
{
while (a[i]>= ' 0 ' &&a[i]<= ' 9 ')
i++;
l=0;
for (++j;j<i;j++)
{
TEXT[L]=A[J];
l++;
}
text[l]= ' + ';
Number (text);
i--;
}
else if (a[i]>= ' a ' &&a[i]<= ' Z ' | | a[i]>= ' A ' &&a[i]<= ' Z ')
{l=0;
For (i;a[i]>= ' a ' && a[i]<= ' z ' | | a[i]>= ' A ' &&a[i]<= ' Z '; i++)
{
Text[l]=a[i];
l++;
}
i--;
text[l]= ' + ';
Fing (text);
}
Else
{
if (a[i]== ' # ')
{
printf ("(0,#)");
Break
}
X=CCC (A,i);
if (x==1)
{
J=i;
}
else if (x==2)
{
i++;
J=i;
}
}
i++;
}
}
0916 Programming Experiment a lexical analysis program