-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAssembler2.java
129 lines (115 loc) · 2.82 KB
/
Assembler2.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import java.io.*;
import java.util.*;
class SymTab
{
int loc;
String val;
SymTab(int loc,String val)
{
this.loc=loc;
this.val=val;
}
}
class Assembler2
{
public static void main(String arg[])
{
Hashtable<String,SymTab> symtab = new Hashtable<String,SymTab>();
Hashtable<String,Integer> optab = new Hashtable<String,Integer>();
optab.put("ADD",15000);
optab.put("MOV",15001);
optab.put("END",-1);
optab.put("START",0);
Hashtable<String,Integer> register = new Hashtable<String,Integer>();
register.put("R1",20001);
register.put("R2",20002);
register.put("R3",20003);
register.put("R4",20004);
register.put("R5",20005);
if(arg.length==0)
{
System.err.print("\nrequired parameter missing..\n");
System.exit(1);
}
File f=new File(arg[0]);
File d=new File("INTERMEDIATE.txt");
try
{
FileReader fr1=new FileReader("SYMTAB.txt");
BufferedReader br1=new BufferedReader(fr1);
FileReader fr=new FileReader(f);
BufferedReader br=new BufferedReader(fr);
FileWriter fw=new FileWriter(d);
BufferedWriter bw=new BufferedWriter(fw);
String s,s1;
while((s1=br1.readLine())!=null)
{
StringTokenizer stn=new StringTokenizer(s1," ");
while(stn.hasMoreTokens())
{
int loc=Integer.parseInt(stn.nextToken());
SymTab st=new SymTab(loc,stn.nextToken());
symtab.put(stn.nextToken(),st);
}
}
bw.write("File Name : "+f.getName()+"\n");
bw.write("Last Modified : "+new Date(f.lastModified())+"\n");
bw.write("Path : "+f.getCanonicalPath()+"\n");
bw.write("File size : "+f.length()+"\n\n");
bw.flush();
while((s=br.readLine())!=null)
{
StringTokenizer stn=new StringTokenizer(s," ");
//System.out.print(s+"\r\n");
while(stn.hasMoreTokens())
{
String str=stn.nextToken();
if(optab.containsKey(str))
{
if(str.equals("START"))
{
bw.write(optab.get(str)+"\r\n");
bw.flush();
}
else
{
bw.write(optab.get(str)+" ");
bw.flush();
}
}
else
if(register.containsKey(str))
{
bw.write(register.get(str)+" ");
bw.flush();
}
else
if(str.equals("BYTE"))
{
SymTab st=symtab.get(stn.nextToken());
String s2=st.val+"";
bw.write(s2.substring(1,s2.length())+"\r\n");
bw.flush();
}
else
if(symtab.containsKey(str))
{
SymTab st=symtab.get(str);
bw.write(st.loc+"\r\n");
bw.flush();
}
}
}
fr.close();
fw.close();
}
catch(FileNotFoundException e)
{
System.err.println("\nfile not found - "+arg[0]+"\n");
}
catch(IOException e)
{
System.err.println("\ni/o alert - "+e.getMessage()+"\n");
}
}
}