Design suitable data structures and implement pass1 of a two pass asmbler import java.util.*; import java.io.*; class TableRow{ String name; int index; int address; TableRow(String name,int address){ super(); this.name=name; this.address=address; this.index=0; } TableRow(String name,int index,int address){ this.address=address; this.name=name; this.index=index; } public void setName(String name) { this.name=name; } public void setIndex(int index) { this.index=index; } public void setAddress(int address) { this.address=address; } public String getName() { return this.name; } public int getIndex() { return this.index; } public int getAddress() { return this.address; } } class Initialize{ HashMap AD; HashMap IS; HashMap CC; HashMap RG; HashMap DL; Initialize(){ AD=new HashMap<>(); IS=new HashMap<>();CC=new HashMap<>(); RG=new HashMap<>(); DL=new HashMap<>(); AD.put("START",1); AD.put("END",2); AD.put("ORIGIN",3); AD.put("EQU",4); AD.put("LTORG",5); DL.put("DC", 1); DL.put("DS", 2); RG.put("AREG", 1); RG.put("BREG", 2); RG.put("CREG", 3); RG.put("DREG", 4); CC.put("LT", 1); CC.put("LTE",2); CC.put("EQ", 3); CC.put("NEQ",4); CC.put("GT",5); CC.put("GTE",6); IS.put("STOP",0); IS.put("ADD",1); IS.put("SUB",2); IS.put("MULT",3); IS.put("MOVER",4); IS.put("MOVEM",5); IS.put("COMP",6); IS.put("BC",7); IS.put("DIV",8); IS.put("READ", 9); IS.put("PRINT",10); } } class assembler { public static void main(String args[]) throws IOException{ BufferedReader br=new BufferedReader(new FileReader("input.txt")); FileWriter pass1=new FileWriter("pass1.txt"); FileWriter symtab=new FileWriter("symtab.txt"); Initialize in=new Initialize(); int symindex=0; int index=0; String line;int flag=0; while((line=br.readLine())!=null) { String parts[]=line.split("\\s+"); for(int i=0;i