Untitled
unknown
plain_text
5 months ago
4.8 kB
3
Indexable
package macropass2; import java.io.*; import java.util.*; public class MacroPass2{ public static void main(String[] args) throws IOException{ mdt[] MDT=new mdt[20]; mnt[] MNT=new mnt[10]; arglist[] formal_parameter=new arglist[10]; arglist[] actual_parameter=new arglist[10]; int macro_addr=-1; boolean macro_start=false,macro_end=false; int macro_call=-1; int mdt_cnt=0,mnt_cnt=0,formal_arglist_cnt=0,actual_arglist_cnt=0,temp_cnt=0,temp_cnt1=0; BufferedReader br1=new BufferedReader(new FileReader("C:\\Users\\anshj\\TCOB61\\Assembler\\src\\macropass2\\MNT.txt")); String line; while((line= br1.readLine()) !=null) { String[] parts=line.split("\\s+"); //System.out.println("\t"+"\t"+parts[0]+"\t"+parts[1]+"\t\t"+parts[2]); MNT[mnt_cnt++]=new mnt(parts[0], Integer.parseInt(parts[1]),Integer.parseInt(parts[2])); } br1.close(); System.out.println("\n\t*************MACRO NAME TABLE***************"); System.out.println("\n\tINDEX\tNAME\tADDRESS\tTOTAL ARGUMENTS"); for(int i=0;i<mnt_cnt;i++) System.out.println("\t"+i+"\t"+MNT[i].name+"\t"+MNT[i].addr+"\t\t"+MNT[i].arg_cnt); br1=new BufferedReader(new FileReader("C:\\Users\\anshj\\TCOB61\\Assembler\\src\\macropass2\\ARGMNT.txt")); while((line=br1.readLine())!=null) { String[] parameters=line.split("\\s+"); formal_parameter[formal_arglist_cnt++]=new arglist(parameters[0]); if(parameters.length>1) formal_parameter[formal_arglist_cnt-1].value = parameters[1]; } br1.close(); System.out.println("\n\n\t*************FORMAL ARGUMENT LIST*********"); System.out.println("\n\tINDEX\tNAME\tVALUE"); for(int i=0;i<formal_arglist_cnt;i++) System.out.println("\t"+i+"\t"+formal_parameter[i].argname+"\t"+formal_parameter[i].value); br1=new BufferedReader(new FileReader("C:\\Users\\anshj\\TCOB61\\Assembler\\src\\macropass2\\MDT.txt")); while((line=br1.readLine())!=null) { MDT[mdt_cnt]=new mdt(); MDT[mdt_cnt++].stmnt=line; } br1.close(); System.out.println("\n\t**************MACRO DEFINITION TABLE************"); System.out.println("\n\tINDEX\t\tSTATEMENT"); for(int i=0;i<mdt_cnt;i++) System.out.println("\t"+i+"\t"+MDT[i].stmnt); br1=new BufferedReader(new FileReader("C:\\Users\\anshj\\TCOB61\\Assembler\\src\\macropass2\\Input.txt")); BufferedWriter bw1=new BufferedWriter(new FileWriter("C:\\Users\\anshj\\TCOB61\\Assembler\\src\\macropass2\\Output.txt")); while((line=br1.readLine())!=null) { line=line.replaceAll(",", " "); String[] tokens=line.split("\\s+"); temp_cnt1=0; for(String current_token:tokens) { if(current_token.equalsIgnoreCase("macro")) { macro_start=true; macro_end=false; } if(macro_end && !macro_start) { if(macro_call !=-1 && temp_cnt<formal_arglist_cnt-1) { if(formal_parameter[actual_arglist_cnt].value !="") actual_parameter[actual_arglist_cnt++]=new arglist(formal_parameter[actual_arglist_cnt-1].value); actual_parameter[actual_arglist_cnt++]=new arglist(current_token); if(formal_parameter[actual_arglist_cnt].value !="") actual_parameter[actual_arglist_cnt++]=new arglist(formal_parameter[actual_arglist_cnt-1].value); } for(int i=0;i<mnt_cnt;i++) { if(current_token.equals(MNT[i].name)) { macro_call=i; temp_cnt1=temp_cnt1+MNT[i].arg_cnt; break; } temp_cnt1=temp_cnt1+MNT[i].arg_cnt; } if(macro_call == -1) bw1.write("\t"+current_token); } if(current_token.equalsIgnoreCase("mend")) { macro_end=true; macro_start=false; } } if(macro_call != -1) { macro_addr=MNT[macro_call].addr+1; while(true) { if(MDT[macro_addr].stmnt.contains("mend") || MDT[macro_addr].stmnt.contains("MEND")) { macro_call=-1; break; } else { bw1.write("\n"); String[] temp_tokens=MDT[macro_addr++].stmnt.split("\\s+"); for(String temp : temp_tokens) { if(temp.matches("#[0-9]+")) { int num=Integer.parseInt(temp.replaceAll("[^0-9]+", "")); bw1.write(actual_parameter[num-1].argname+"\t"); } else bw1.write(temp+"\t"); } } } } if(!macro_start) bw1.write("\n");; macro_call= -1; } br1.close(); bw1.close(); System.out.println("\n\n\t*****************ACTUAL ARGUMENT LIST***************"); System.out.println("\n\tINDEX\tNAME\tADDRESS"); for(int i=0;i<actual_arglist_cnt;i++) System.out.println("\t"+i+"\t"+actual_parameter[i].argname); } }
Editor is loading...
Leave a Comment