Pass 1 and Pass2
Pass 1 and Pass2
In.txt
- START 100
L1 MOVER AREG =3
- MOVEM BREG X
- SUB AREG =1
- LTORG
- MOVEM AREG Y
- BC ANY L1
- ADD CREG 4
X DC 6
Y DS 2
- END
Opt.txt
STOP IS 01
ADD IS 02
SUB IS 03
MUL IS 04
MOVER IS 05
MOVEM IS 06
BC IS 07
START AD 01
END AD 02
ORIGIN AD 03
LTORG AD 04
AREG R1
BREG R2
CREG R3
DREG R4
ANY R5
DC DL 01
DS DL 02
Code of Pass1:
import java.io.*;
import java.util.*;
class Pass1
{
public static void main(String args[])throws Exception
{
int loc=0,loc1=0;
int j=0,k=0,sym=0,lit=0,v=0,w=0,sy=0;
int [] Lad=new int[5];
b4.write(" C "+i);
loc=loc+1;
b4.newLine();
}
}
else
{
b4.write(loc+" ");
if(s1[0].equals("-")!=true)
{
if(s1[0].equals("L1")==true)
{ sym++;
sy =sym;
}
b3.write(" "+s1[0]);
b3.write(" "+loc+" ");
}
FileReader f2=new FileReader("op.txt");
BufferedReader b2=new BufferedReader(f2);
while((sl=b2.readLine())!=null)
{
j=0;
StringTokenizer se=new StringTokenizer(sl);
while(se.hasMoreTokens())
{
s2[j]=se.nextToken();
j++;
}
if(s1[1].equals(s2[0])==true)
{
for(int a=1;a<3;a++)
{
b4.write(" ");
b4.write(" "+s2[a]);
}
if(s1[1].equals("LTORG"))
{ Lad[k]=loc;
k++;
for(int z=1;z<v;z++)
{
loc = loc+1;
b4.newLine();
b4.write(loc+" ");
for(int t=1;t<3;t++)
{
b4.write(" ");
b4.write(" "+s2[t]);
}
Lad[k]=loc;
k++;
}
}
}
if(s1[1].equals("LTORG")!=true)
{
if(s1[2].equals(s2[0])==true)
{
for(int a=1;a<2;a++)
{
b4.write(" ");
b4.write(" "+s2[a]);
}
}
}
}
if(s1[1].equals("LTORG")!=true)
{
if(s1[3].contains("="))
{
w = w+1;
int i;flag=0;
for( i=0;i<lit;i++)
{
if(s5[i][1].equals(s1[3]))
{flag=1;
break;}
}
if(flag!=1)
{
lit++;
s5[v][0]=Integer.toString(lit);
s5[v][1]=s1[3];
v++;
else if((s1[3]).matches("[a-zA-Z]"))
{
}
else if((s1[3]).matches("L1"))
{
b4.write(" "+"S "+ sy);
}
else if((s1[0]).matches("[a-zA-Z]"))
{
if(Integer.parseInt(s1[2])>0 ||Integer.parseInt(s1[2])<=9)
{
}
}
else if(Integer.parseInt(s1[3])>0 ||Integer.parseInt(s1[3])<=9)
{
}
}
loc=loc+1;
b4.newLine();
b4.newLine();
b3.newLine();
}
b4.close();
b3.close();
for(int e= 0;e<lit;e++){
b5.newLine();
b5.write(" "+s5[e][0]+" "+s5[e][1]+" "+Lad[e]);
}
b5.close();
}
}
Output of Pass1 / Input of Pass2:
Intermediate.txt
AD 01 C 100
100 IS 05 R1 L 1
101 IS 06 R2 S 2
102 IS 03 R1 L 2
103 AD 04
104 AD 04
105 IS 06 R1 S 3
106 IS 07 R5 S 1
107 IS 02 R3 004
108 DL 01 006
109 DL 02 002
110 AD 02 C 1
111 AD 02 C 2
Symboltab.txt
L1 100
X 108
Y 109
Literaltab.txt
1 =3 103
2 =1 104
Code for Pass2:
import java.io.*;
import java.util.*;
class Pass2
{
public static void main(String args[])throws Exception
{
String s;
String s1[]=new String[70];
String s2[]=new String[70];
String s3[]=new String[70];
int m=0;
while((s=b2.readLine())!=null)
{
for(int i=0;i<m;i++)
{
if("AD".equals(s1[i]) && "01".equals(s1[i+1]))
{
b1.write("");
}
if("R1".equals(s1[i])||"R2".equals(s1[i])||"R3".equals(s1[i])||"R4".equals(s1[i]))
{
b1.write("\t"+s1[i]);
b1.write(" ");
}
if("IS".equals(s1[i]))
{
b1.write(s1[i-1]+"\t");
b1.write(s1[i+1]);
}
if("L".equals(s1[i]))
{
for(int j=0;j<m2;j++)
{
if(s1[i+1].equals(s3[j]))
{
b1.write("\t");
b1.write(s3[j+2]+"\n");
}
}
}
if("S".equals(s1[i]))
{
for(int j=0;j<m1;j++)
{
if(s1[i+1].equals(s2[j]))
{
b1.write("\t");
b1.write(s2[j+2]+"\n");
}
}
}
if("DL".equals(s1[i])&&"01".equals(s1[i+1]))
{
b1.write(s1[i-1]+"\t");
b1.write("-"+"\t");
b1.write("-");
b1.write("\t");
b1.write("00"+s1[i+3]+"\n");
}
if(s1[i].equals("AD") && s1[i+1].equals("02"))
{
b1.write(s1[i-1]+"\t");
b1.write("-"+"\t");
b1.write("-");
b1.write("\t");
b1.write("00"+s1[i+3]+"\n");
}
b1.close();
b2.close();
b3.close();
b4.close();
}
}
Output of Pass2:
01 - 100
100 05 R1 103
101 06 R2 109
102 03 R1 104
103 04 - 003
104 04 - 001
105 06 R1 110
106 07 R5 100
107 02 R3 004
108 01 - 006
109 02 - 002
110 02 - -