Java Code For Shift Reduce Parser

















Shift Reduce Parser:-

import java.util.*;
class SR
{
public static void main(String args[])
{
Scanner src=new Scanner(System.in);
String t[]=new String[50],v,b;
System.out.println("Enter grammar with transition in the format S->(V+T)* ");
String a=src.nextLine();
int p=a.indexOf("-"),p1=0,k=0,i;
v=a.substring(0,p);
a=a.substring(p+2,a.length());
p=0;
for(i=p;i<a.length();i++)
{
if(a.charAt(i)=='|')
{
t[k++]=a.substring(p,i);
p=i+1;
}
}
t[k++]=a.substring(p,a.length());
System.out.println("Enter input string for checking");
String ip=src.next(),s="$",s1,s2;
ip+="$";
System.out.println("Stack\t\t\tInput\t\t\tAction");
System.out.println(s+"\t\t\t"+ip+"\t\t- ");
more:while(!(ip.equals("$")&&s.equals("$"+v)))
{
p1=0;
for(int j=0;j<k;j++)
{
s2=s.substring(1,s.length());
if(s2.contains(t[j]))
{
s2 = replace(t[j],v ,s2);
s="$"+s2;
System.out.println(s+"\t\t\t"+ip+"\t\t\tReduced "+t[j]);
continue more;
}
}
if(!(ip.equals("$")))
{ for(int j=0;j<ip.length();j++)
{
if(ip.charAt(j)=='$'||ip.charAt(j)=='+'||ip.charAt(j)=='*')
{
if(p1!=j)
{
s1=ip.substring(p1,j);
p1=j;
}
else
{
s1=ip.substring(p1,j+1);
p1=j+1;
}
s+=s1;
ip=ip.substring(p1,ip.length());
System.out.println(s+"\t\t\t"+ip+"\t\t\tShifted "+s1);
continue more;
}
}
}
if(ip.equals("$")) break;
}
if(ip.equals("$")&&s.equals("$"+v))
System.out.println(s+"\t\t\t"+ip+"\t\t\tAccepted");
else
System.out.println(s+"\t\t\t"+ip+"\t\t\tRejected");
}

public static String replace(String s1, String s2, String s3)
{
   int i = 0, j=0 ;
String s="";
while(i<s3.length() && j<s3.length())
{
i=s3.indexOf(s1,j);
j = i+s1.length();
s = s + s3.substring(0,i) + s2 + s3.substring(j,s3.length());
}
return s;
}
}


0 comments :