Assignment 2 Pass 1
Design suitable data structures and implement Pass-I of a two-pass
microprocessor.
[Link]
import [Link].*;
import [Link].*;
class MACRO
{
static String mnt[][]=new String[5][3]; //assuming 5 macros in 1 program
static String ala[][]=new String[10][2]; //assuming 2 arguments in each macro
static String mdt[][]=new String[20][1]; //assuming 4 LOC for eachmacro
static int mntc=0,mdtc=0,alac=0;
public static void main(String args[])
{
pass1();
[Link]("\n*********PASS-1 MACROPROCESSOR***********\n");
[Link]("MACRO NAME TABLE (MNT)\n");
[Link]("i macro loc\n");
display(mnt,mntc,3);
[Link]("\n");
[Link]("ARGUMENT LIST ARRAY(ALA) for Pass1\n");
display(ala,alac,2);
[Link]("\n");
[Link]("MACRO DEFINITION TABLE (MDT)\n");
display(mdt,mdtc,1);
[Link]("\n");
}
static void pass1()
{
int index=0,i;
String s,prev="",substring;
try
{
BufferedReader inp = new BufferedReader(new FileReader("[Link]"));
File op = new File("pass1_output.txt");
if (![Link]())
[Link]();
BufferedWriter output = new BufferedWriter(new
FileWriter([Link]()));
while((s=[Link]())!=null)
{
if([Link]("MACRO"))
{
prev=s;
for(;!(s=[Link]()).equalsIgnoreCase("MEND");mdtc++,prev=s)
{
if([Link]("MACRO"))
{
StringTokenizer st=new StringTokenizer(s);
String str[]=new String[[Link]()];
for(i=0;i<[Link];i++)
str[i]=[Link]();
mnt[mntc][0]=(mntc+1)+""; //mnt formation
mnt[mntc][1]=str[0];
mnt[mntc++][2]=(++mdtc)+"";
st=new StringTokenizer(str[1],","); //tokenizing the arguments
String string[]=new String[[Link]()];
for(i=0;i<[Link];i++)
{
string[i]=[Link]();
ala[alac][0]=alac+""; //ala table formation
index=string[i].indexOf("=");
if(index!=-1)
ala[alac++][1]=string[i].substring(0,index);
else
ala[alac++][1]=string[i];
}
}
else //automatically eliminates tagging of arguments in definition
{ //mdt formation
index=[Link]("&");
substring=[Link](index);
for(i=0;i<alac;i++)
if(ala[i][1].equals(substring))
s=[Link](substring,"#"+ala[i][0]);
}
mdt[mdtc-1][0]=s;
}
mdt[mdtc-1][0]=s;
}
else
{
[Link](s);
[Link]();
}
}
[Link]();
}
catch(FileNotFoundException ex)
{
[Link]("UNABLE TO END FILE ");
}
catch(IOException e)
{
[Link]();
}
}
static void display(String a[][],int n,int m)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
[Link](a[i][j]+" ");
[Link]();
}
}
}
[Link]
START
MACRO
INCR &ARG3 &ARG2
ADD AREG &ARG1
MOVER BREG &ARG1
MEND
MACRO
PVG &ARG2 &ARG1
SUB AREG &ARG2
MOVER CREG & ARG1
MEND
INCR
DECR
DATA2
END
Output:
*********PASS-1 MACROPROCESSOR***********
MACRO NAME TABLE (MNT)
i macro loc
1 INCR 1
2 PVG 5
ARGUMENT LIST ARRAY(ALA) for Pass1
0 &ARG3
1 &ARG2
MACRO DEFINITION TABLE (MDT)
INCR &ARG3 &ARG2
ADD AREG &ARG1
MOVER BREG &ARG1
MEND
PVG &ARG2 &ARG1
SUB AREG #1
MOVER CREG & ARG1
MEND