Академический Документы
Профессиональный Документы
Культура Документы
import java.io.*;
import java.util.*;
public class lexicar {
public static void main(String... args) throws IOException,FileNotFoundException{
FileReader f1 = new FileReader("C:\\Users\\Ankur\\sample.txt");
Scanner sc =new Scanner(f1);
String t1;
int i, t=1;
String kw[]={"void", "int"};
String id[]={"printf","main"};
String ter[]={"(",")",",",";","{","}"};
String op[]={"+","=","-","/","%","*"};
String lit[]={"a","b","c"};
if(id[i].equals(t1))
System.out.println(t+" \t\t"+t1+" \t\tIdentifier");
}
for(i=0;i<ter.length;i++)
{
if(ter[i].equals(t1))
System.out.println(t+" \t\t"+t1+" \t\tTerminal");
}
for(i=0;i<op.length;i++)
{
if(op[i].equals(t1))
System.out.println(t+" \t\t"+t1+" \t\tOperator");
}
for(i=0;i<lit.length;i++)
{
if(lit[i].equals(t1))
System.out.println(t+" \t\t"+t1+" \t\t Literal");
}
if(t1.equals(")")|| t1.equals("{")|| t1.equals(";"))
t++;
}
}
}
import java.io.*;
String searchQuery=brkl[i];
String replaceWord = brkr[i];
int startIndexVal =0;
int endIndexVal=0;
startIndexVal=str.indexOf(searchQuery);
endIndexVal=startIndexVal+searchQuery.length();
str=str.substring(0,startIndexVal) + replaceWord +
str.substring(endIndexVal);
brkl[j]=str;
}
}
}
}
System.out.println("\n After common subexpression elimination");
for(i=0;i<n;i++)
{
System.out.println(brkr[i]+"="+brkl[i]);
}
}
}
FIRST()
import java.util.*;
import java.io.*;
public class FIRST
{
Left Recursion
import java.io.*;
import java.util.*;
class leftrecursion
{
public static void main (String args[])
{
char non_terminal;
char beta,alpha;
String production;
int i=0;
String[] input=new String[6];
Scanner sn=new Scanner(System.in);
System.out.println("Enter 'END' to stop");
do
{
System.out.println("Enter production");
i++;
input[i]=sn.nextLine();
}
while(input[i].equalsIgnoreCase("End")==false);
int n=i;
System.out.println("GRAMMAR AFTER REMOVING LEFT RECURSION IS");
System.out.println("WHERE 9 IS EPSILON");
System.out.println();
for(i=1;i<n;i++)
{
int index=3;
production=input[i];
non_terminal=production.charAt(0);
if(non_terminal==production.charAt(index))
{
alpha=production.charAt(index+1);
while(production.charAt(index)!=0 &&
production.charAt(index)!='|')
index++;
if(production.charAt(index)!=0)
{
beta=production.charAt(index+1);
System.out.print(non_terminal+">"+beta+non_terminal+"\'\n");
System.out.print(non_terminal+"\'>"+alpha+beta+non_terminal+"\'|9\n");
}
else
System.out.println("Grammar can't be reduced\n");
}
else
System.out.println(production);
}
}
}
OUTPUT:
Enter 'END' to stop
Enter production
E->E+T|T
Enter production
T->T*F|F
Enter production
F->(i)
Enter production
END
GRAMMAR AFTER REMOVING LEFT RECURSION IS
WHERE 9 IS EPSILON
E->TE'
E'->+TE'|9
T->FT'
T'->*FT'|9
F->(i)
Process completed
import java.util.*;
import java.io.*;
class NRPT
{
static DataInputStream din=new DataInputStream(System.in);
static String grammar,rule[],var[][],list,NRPPT[][],nont="";
static boolean done[];
public static void main(String args[])
{
grammar=getInput("Enter grammar");
rule=grammar.split(",");
list=getInput("Enter list");
var=new String[list.length()][3];
done=new boolean[list.length()];
System.out.println();
int i=list.length()*10;
int j,flag=0;
char x;
for(i=0;i<grammar.length();i++)
{
for(j=0;j<nont.length();j++)
if(grammar.charAt(i)==nont.charAt(j))
flag=1;
if(isTerminal(grammar.charAt(i)) && flag==0)
nont+=grammar.charAt(i);
}
nont+='$';
System.out.println("NON TERMINALS are");
System.out.println(nont);
NRPPT=new String[list.length()][nont.length()];
for(i=0;i<var.length;i++)
{
done[i]=false;
char c=list.charAt(i);
var[i][0]=c+"";
var[i][1]=getInput("First("+c+")");
var[i][2]=getInput("Follow("+c+")");
}
for(i=0;i<var.length;i++)
first(var[i][0].charAt(0));
System.out.println("\nPARSER TABLE");
System.out.print(" ");
for(i=0;i<nont.length();i++)
System.out.print(nont.charAt(i)+" ");
System.out.println();
for(i=0;i<list.length();i++)
{
char ab=list.charAt(i);
System.out.print(ab+" ");
for(j=0;j<nont.length();j++)
System.out.print(NRPPT[i][j]+" ");
System.out.println();
}
}
static String getInput(String msg)
{
try
{
System.out.print(msg+"=");
return din.readLine();
}
catch(Exception e)
{
}
return "";
}
static boolean isDone(char c)
{
for(int i=0;i<var.length;i++)
{
if(var[i][0].equals(c+""))
{
boolean flag=done[i];
done[i]=true;
return flag;
}
}
return false;
}
static String follow(char c)
{
for(int i=0;i<var.length;i++)
{
if(var[i][0].equals(c+""))
return var[i][2];
}
return "";
}
static String first(char c)
{
if(!isNonTerminal(c))
return c+"";
boolean flag=isDone(c);
String first="";
for(int i=0;i<rule.length;i++)
{
if(rule[i].charAt(0)==c)
{
String s="";
for(int j=2;j<rule[i].length();j++)
{
char ch=rule[i].charAt(j);
s=first(ch);
if(!s.equals(""))
break;
}
first+=s+" ";
if(!flag)
addToParserTable(c,s,i);
}
}
return first.trim();
}
static void addToParserTable(char nt,String t,int n)
{
int j,k;
boolean null_found=false;
for(int i=0;i<t.length();i++)
{
char ch=t.charAt(i);
if(ch!=' ' && ch!='?')
{
for(k=0;k<list.length();k++)
{
if(nt==list.charAt(k))
{
for(j=0;j<nont.length();j++)
{
if(ch==nont.charAt(j))
NRPPT[k][j]=rule[n];
}
}
}
}
if(ch=='?')
null_found=true;
}
if(null_found)
addToParserTable(nt,follow(nt),n);
}
static boolean isTerminal(char c)
{
if(!isNonTerminal(c) && c!=',' && c!='=' && c!='?')
return true;
return false;
}
static boolean isNonTerminal(char c)
{
if('A'<=c && c<='Z')
return true;
return false;
}
}
OUTPUT
Enter grammar=E=TX,X=+TX,X=?,T=FY,Y=*FY,Y=?,F=(E),F=i
Enter list=EXTYF
NON TERMINALS are
+*()i$
First(E)=(i
Follow(E)=$(
First(X)=?+
Follow(X)=$)
First(T)=(i
Follow(T)=?*
First(Y)=?*
Follow(Y)=+$)
First(F)=(i
Follow(F)=*+$)
PARSER TABLE
+*()i$
E null null E=TX null E=TX null
X X=+TX null null X=? null X=?
T null null T=FY null T=FY null
Y Y=? Y=*FY null Y=? null Y=?
F null null F=(E) null F=i null
Process completed.