Вы находитесь на странице: 1из 18

/* VALIDATION OF AN IDENTIFIER*/

#include<stdio.h>
main()
{
char ch[32];
int i;
clrscr();
printf(“enter a word:”);
scanf(“%s”,&ch);
i=ch[0];
if((i>65&&i<90)||(i>=97&&i<=122))
printf(“%s is an identifier”,ch);
else
printf(“%s is not an identifier”,ch);
getch();
}
/* COUNT NO.OF WHITE SPACES*/

#include<stdio.h>
main()
{
char ch[50];
int i=-1,s=0;
clrscr();
printf(“enter a sententence: ”);
do
{
i++;
scanf(“%c”,&ch[i]);
}while(ch[i]!=’\n’);
for(i=0;ch[i]!=’\n’;i++)
{
if(ch[i]==’ ‘)
s++;
}
printf(“No.of white spaces: %d”,s);
getch();
}
/*Infix To Postfix*/

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
void push(char);
char pop();
priority(char);
topost(char infix[]);
char stack[20];
int t=-1;
main()
{
char infix[20];
clrscr();
printf("enter the infix exp");
gets(infix);
printf("postfix");
topost(infix);
getch();
}
void push(char s)
{
if(t==19)
{
puts("stack overflow");
}
else
{
t++;
stack[t]=s;
}
}
char pop()
{
char topelem;
if(t==-1)
{
printf("stack is underflow");
exit(0);
}
else
{
topelem=stack[t];
t--;
}
return(topelem);
}
priority(char p)
{
if((p=='/')||(p=='*'))
return 2;
else if((p=='+')||(p=='-'))
return 1;
else if(p=='#')
return 0;
}
topost(char infix[])
{
int len;
static int index=0,pos=0;
char s,t1;
char postfix[40];
len=strlen(infix);
push('#');
while(index<len)
{
s=infix[index];
switch(s)
{
case '(':push(s);break;
case ')':pop();
while(t!='(')
{
postfix[pos]=t1;
pos++;
t1=pop();
}
break;
case '+':
case '-':
case '*':
case '/':
while(priority(stack[t])>priority(s))
{
t1=pop();
postfix[pos]=t1;
pos++;
}
push(s);
break;
default: postfix[pos]=s;pos++;
break;
}
index++;
}
while(t>0)
{
t1=pop();
postfix[pos++]=t1;
}
postfix[pos++]='\0';
puts(postfix);
return 0;
}
/* Evalution Postfix Expression*/
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int eval(char[],int);
int pop();
int operator(char);
void push(int);
int tos=-1;
int stack[50];
main()
{
char post[80];
int len,res;
clrscr();
printf(“\nenter postfix expression:”);
gets(post);
len=strlen(post);
res=eval(post,len);
printf(“The value postfix expression is: %d “,res);
getch();
}
int eval(char post[80],int len)
{
int I,op1,op2;
int val;
for(i=0;i<len;i++)
{
if(operator(post[i]==0)
push(post[i]-’0’);
else
{
op2=pop();
op1=pop();
switch(post[i])
{
case ‘+’: val=op1+op2;
push(val);
break;
case ‘-’: val=op1-op2;
push(val);
break;
case ‘*’: val=op1*op2;
push(val);
break;
case ‘/’: val=op1/op2;
push(val);
break;
}
}
}
val=pop();
return(val);
}
int operator(char c)
{
if(c==’+’||c==’-‘||c==’*’||c==’/’)
return(1);
else
return(0);
}
void push(int ele)
{
stack[++tos]=ele;
}
int pop()
{
return(stack[tos--]);
}
/* Lexical Analyzer for Arithmetic Expressions*/
#include<stdio.h>
#include<string.h>
main()
{
char str[20],alpha[70];
char operator[]={‘+’,’-‘,’/’,’*’,’%’,’=’};
int n,I,j=0,iden=0,len;
clrscr();
for(i=65;i<91;i++,j++)
alpha[j]=i;
for(i=97;i<123;i++)
alpha[j++]=i;
n=strlen(alpha);
printf(“Enter the expression: “);
gets(str);
printf(“\ntokens----------type\n”);
len=strlen(str);
for(i=0;i<len;i++)
{
iden=0;
for(j=0;j<56;j++)
{
if(str[i]==alpha[j])
{
printf(“\n%c Operand”,str[i]);
j=57;
iden=1;
}
}
if(iden!=1)
{
for(j=0;j<6;j++)
{
if(str[i]==operator[j])
{
printf(“\n%c Operator”,str[i]);
j=len;
iden=1;
}
}
if(iden!=1)
{
for(j=48;j<=58;j++)
{
if((int)str[i]==j)
{
printf(“\n%c Digit”,str[i]);
j=60;
}
}
}
}
}
getch();
}
/* Recursive Descent Parsing*/

#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<ctype.h>
int r,ip=0,ip1=0,e1=1,t1=1,f1=1;
char input[30];
int E(),E1(),T(),T1(),F();
void main()
{
int i,x;
clrscr();
printf("enter input string");
scanf("%s",input);
strcat(input,"$");
r=E();
if(r==1)
{
if(input[ip]=='$')
{
printf("\n--------accepted---------");
getch();
}
}
else
printf("\n not accepted");
getch();
}
int E()
{
int flag=0;
printf("\n E-->TE1");
r=T();
if(r==1)
{
while(flag==0)
{
r=E1();
e1++;
if(r==1||e1>2)
flag=1;
}
e1=1;
if(r==1)
return 1;
}
return -1;
}
E1()
{
int ip1=ip;
int flag=0;
if(e1==1)
{
if(input[ip]=='+')
{
printf("\n E1-->+TE1");
ip++;
r=T();
if(r==1)
{
while(flag==0)
{
r=E1();
e1++;
if(r==1||e1>2)
break;
}
e1=1;
if(r==1)
return 1;
}
}
}
else if(e1==2)
{
printf("\n E1--->#");
return 1;
}
printf("\n back tracking");
ip=ip1;
return -1;
}
T()
{
int flag=0;
printf("\n T-->FT1");
while(flag==0)
{
r=F();
f1++;
if(r==1||f1>2)
break;
}
f1=1;
flag=0;
if(r==1)
{
while(flag==0)
{
r=T1();
t1++;
if(r==1||t1>2)
flag=1;
}
t1=1;
if(r==1)
return 1;
}
return -1;
}
T1()
{
int ip1=ip;
int flag=0;
if(t1==1)
{
if(input[ip]=='*')
{
printf("\n T1--->*FT1");
ip++;
while(flag==0)
{
r=F();
f1++;
if(r==1||f1>2)
flag=1;
}
f1=1;
flag=0;
if(r==1)
{
while(flag==0)
{
r=T1();
t1++;
if(r==1||t1>2)
flag=1;
}
t1=1;
if(r==1)
return 1;
}
}
}
else if(t1==2)
{
printf("\n T1-->#");
return 1;
}
printf("\n back tracking");
ip=ip1;
return -1;
}
F()
{
int ip1=ip;
if(f1==1)
{
if(input[ip]=='(')
{
printf("\n F-->(E)");
ip++;
r=E();
if(r==1)
{
if(input[ip]==')')
{
ip++;
return 1;
}
}
}
}
else if(f1==2)
{
if(input[ip]=='i')
{
printf("\n F--->i");
ip++;
return 1;
}
}
printf("\n back tracking");
ip=ip1;return -1;
}
/*Predictive Parser*/
#include<stdio.h>
int stack[20],top=-1;
void push(int item)
{
if(top>=20)
{
printf("STACK OVERFLOW");
exit(1);
}
stack[++top]=item;
}
int pop()
{
int ch;
if(top<=-1)
{
printf("underflow");
exit(1);
}
ch=stack[top--];
return ch;
}
char convert(int item)
{
char ch;
switch(item)
{
case 0:return('E');
case 1:return('e');
case 2:return('T');
case 3:return('t');
case 4:return('F');
case 5:return('i');
case 6:return('+');
case 7:return('*');
case 8:return('(');
case 9:return(')');
case 10:return('$');
}
}
void main()
{
int m[10][10],i,j,k;
char ips[20];
int ip[10],a,b,t;
m[0][0]=m[0][3]=21;
m[1][1]=621;
m[1][4]=m[1][5]=-2;
m[2][0]=m[2][3]=43;
m[3][1]=m[3][4]=m[3][5]=-2;
m[3][2]=743;
m[4][0]=5;
m[4][3]=809;
clrscr();
printf("\n enter the input string:");
scanf("%s",ips);
for(i=0;ips[i];i++)
{
switch(ips[i])
{
case 'E':k=0;break;
case 'e':k=1;break;
case 'T':k=2;break;
case 't':k=3;break;
case 'F':k=4;break;
case 'i':k=5;break;
case '+':k=6;break;
case '*':k=7;break;
case '(':k=8;break;
case ')':k=9;break;
case '$':k=10;break;
}
ip[i]=k;
}
ip[i]=-1;
push(10);
push(0);
i=0;
printf("\tstack\t input \n");
while(1)
{
printf("\t");
for(j=0;j<=top;j++)
printf("%c",convert(stack[j]));
printf("\t\t");
for(k=i;ip[k]!=-1;k++)
printf("%c",convert(ip[k]));
printf("\n");
if(stack[top]==ip[i])

{
if(ip[i]==10)
{
printf("\t\t SUCCESS");
return;
}
else
{
top--;
i++;
}
}
else if(stack[top]<=4&&stack[top]>=0)
{
a=stack[top];
b=ip[i]-5;
t=m[a][b];
top--;
while(t>0)
{
push(t%10);
t=t/10;
}
}
else
{
printf("ERROR");
return;
}
}
getch();
}

Вам также может понравиться