#include <stdio.h>
#include <string.h>
int Input1 (char a)
{
int i=0;
Switch (a)
{
Case (' + '):
printf ("%c\t 13\n", a); i++;break;
Case ('-'):
printf ("%c\t 14\n", a); i++;break;
Case (' * '):
printf ("%c\t 15\n", a); i++;break;
Case ('/'):
printf ("%c\t 16\n", a); i++;break;
Case (': '):
printf ("%c\t 17\n", a); i++;break;
Case (' < '):
printf ("%c\t 20\n", a); i++;break;
Case (' > '):
printf ("%c\t 23\n", a); i++;break;
Case (' = '):
printf ("%c\t 25\n", a); i++;break;
Case (';'):
printf ("%c\t 26\n", a); i++;break;
Case (' ('):
printf ("%c\t 27\n", a); i++;break;
Case (') '):
printf ("%c\t 28\n", a); i++;break;
Case (' # '):
printf ("%c\t 0\n", a); i++;break;
}
return i;
}
int Input2 (char a[])
{
int i=0;
if ((strcmp (A, "if") ==0))
{printf ("if\t 2\n"); i++;}
else if ((strcmp (A, "do") ==0))
{printf ("do\t 5\n"); i++;}
else if ((strcmp (A, ": =") ==0))
{printf (": =\t 18\n"); i++;}
else if ((strcmp (A, "<=") ==0))
{printf ("<=\t 21\n"); i++;}
else if ((strcmp (A, "<>") ==0))
{printf ("<>\t 22\n"); i++;}
else if ((strcmp (A, ">=") ==0))
{printf (">=\t 24\n"); i++;}
return i;
}
int Input3 (char a[])
{
int i=0;
if ((strcmp (A, "end") ==0))
{printf ("end\t 6\n"); i++;}
else if ((strcmp (A, "dd*") ==0))
{printf ("dd*\t 11\n"); i++;}
return i;
}
int Input4 (char a[])
{
int i=0;
if ((strcmp (A, "then") ==0))
{printf ("then\t 3\n"); i++;}
return i;
}
int Input5 (char a[])
{
int i=0;
if ((strcmp (A, "Begin") ==0))
{printf ("begin\t 3\n"); i++;}
else if ((strcmp (A, "Begin") ==0))
{printf ("begin\t 1\n"); i++;}
else if ((strcmp (A, "while") ==0))
{printf ("while\t 4\n"); i++;}
return i;
}
/*int Input8 (char a[])
{
int i=0;
if ((strcmp (A, "| | | d) * ") ==0))
{printf ("begin\t 3\n"); i++;}
return i;
}*/
#define MAX 100
struct Code
{
Char Chars[max];
};
int main ()
{
Char Sc[max];
Code Code[max];
int i,j,k,n;
printf ("Please Enter code:");
Gets (SC);
printf ("Word symbol species code \ n");
i=j=k=0;
N=1;
while (sc[i]!= ')
{
Code[k].chars[j]=sc[i];
code[k].chars[j+1]= ' + ';
Switch (n)
{
Case (1): if (INPUT1 (Code[k].chars[j]) ==1)
{k++;j=-1;} Break
Case (2): if (Input2 (code[k].chars) ==1)
{k++;j=-1;} Break
Case (3): if (INPUT3 (code[k].chars) ==1)
{k++;j=-1;} Break
Case (4): if (Input4 (code[k].chars) ==1)
{k++;j=-1;} Break
Case (5): if (INPUT5 (code[k].chars) ==1)
{k++;j=-1;} Break
/*case (8): if (Input8 (code[k].chars) ==1)
{k++;j=-1;} Break */
Default
printf ("%s\t syntax error!\n", code[k].chars); k++;j=-1;break;
}
if (j==-1)
n=0;
j + +;
i++;
n++;
}
return 0;
}
0917 Experimental One lexical analysis program