Skip to content

Commit 8932b10

Browse files
authored
Added new program Assembly.java ronijpandey#2
1 parent bb64c20 commit 8932b10

File tree

1 file changed

+180
-0
lines changed

1 file changed

+180
-0
lines changed

Assembly.java

+180
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
2+
import java.util.*;
3+
4+
public class Assembly {
5+
6+
public static void main(String args[]) {
7+
Scanner in = new Scanner(System.in);
8+
Map<String, Integer> vars = new HashMap<String, Integer>();
9+
Map<String, Integer> labels = new HashMap<String, Integer>();
10+
Map<Integer, Integer> endif = new HashMap<Integer, Integer>();
11+
Map<Integer, Integer> loop = new HashMap<Integer, Integer>();
12+
Stack ifs = new Stack();
13+
Stack fors = new Stack();
14+
String temp;
15+
ArrayList<String> code = new ArrayList<String>();
16+
while (true) {
17+
temp = in.nextLine();
18+
if(temp.equals("###")){
19+
break;
20+
}
21+
code.add(temp);
22+
23+
}
24+
//temp = in.nextLine();
25+
//code.add(temp);
26+
int l = code.size();
27+
String comp[];
28+
int a, b, i;
29+
a=b=i=0;
30+
for (i = 0; i < l; i++) {
31+
comp = code.get(i).split(" ");
32+
switch (comp[0]) {
33+
case "SET":
34+
if (!vars.containsKey(comp[2])) {
35+
if (comp[2].compareTo("a") >= 0 && comp[2].compareTo("z") <= 0) {
36+
vars.put(comp[2], 0);
37+
}
38+
}
39+
40+
if (comp[2].compareTo("a") >= 0 && comp[2].compareTo("z") <= 0) {
41+
vars.put(comp[1], vars.get(comp[2]));
42+
} else {
43+
vars.put(comp[1], Integer.parseInt(comp[2]));
44+
}
45+
break;
46+
47+
case "ADD":
48+
if (vars.containsKey(comp[1])) {
49+
a = vars.get(comp[1]);
50+
} else if (comp[1].compareTo("a") >= 0 && comp[1].compareTo("z") <= 0) {
51+
vars.put(comp[1], 0);
52+
a = vars.get(comp[1]);
53+
} else {
54+
a = Integer.parseInt(comp[1]);
55+
}
56+
if (vars.containsKey(comp[2])) {
57+
b = vars.get(comp[2]);
58+
} else if (comp[2].compareTo("a") >= 0 && comp[2].compareTo("z") <= 0) {
59+
vars.put(comp[2], 0);
60+
b = vars.get(comp[2]);
61+
} else {
62+
b = Integer.parseInt(comp[2]);
63+
64+
}
65+
vars.put(comp[3], a + b);
66+
break;
67+
68+
case "IF":
69+
if (!vars.containsKey(comp[1])) {
70+
if (comp[1].compareTo("a") >= 0 && comp[1].compareTo("z") <= 0) {
71+
vars.put(comp[1], 0);
72+
}
73+
}
74+
if (!vars.containsKey(comp[2])) {
75+
if (comp[2].compareTo("a") >= 0 && comp[2].compareTo("z") <= 0) {
76+
vars.put(comp[2], 0);
77+
}
78+
}
79+
ifs.push(new Integer(i));
80+
fors.push(new Integer(i));
81+
break;
82+
case "LABEL":
83+
labels.put(comp[1], i);
84+
break;
85+
case "END":
86+
endif.put((Integer) ifs.pop(), i);
87+
if(!fors.empty()){
88+
fors.pop();
89+
}
90+
break;
91+
case "CONTINUE":
92+
loop.put(i, (Integer) fors.pop()-1);
93+
break;
94+
default:
95+
i = i; //do nothing
96+
}
97+
}
98+
i = 0;
99+
while (i < l) {
100+
comp = code.get(i).split(" ");
101+
switch (comp[0]) {
102+
case "SET":
103+
if (comp[2].compareTo("a") >= 0 && comp[2].compareTo("z") <= 0) {
104+
vars.put(comp[1], vars.get(comp[2]));
105+
} else {
106+
vars.put(comp[1], Integer.parseInt(comp[2]));
107+
}
108+
break;
109+
case "EXIT":
110+
i = l - 1;
111+
break;
112+
case "ECHO":
113+
if (vars.containsKey(comp[1])) {
114+
System.out.println(vars.get(comp[1]));
115+
} else if (comp[1].compareTo("a") >= 0 && comp[1].compareTo("z") <= 0) {
116+
vars.put(comp[1], 0);
117+
System.out.println(vars.get(comp[1]));
118+
} else {
119+
System.out.println(comp[1]);
120+
}
121+
break;
122+
case "ADD":
123+
if (vars.containsKey(comp[1])) {
124+
a = vars.get(comp[1]);
125+
} else {
126+
a = Integer.parseInt(comp[1]);
127+
}
128+
if (vars.containsKey(comp[2])) {
129+
b = vars.get(comp[2]);
130+
} else {
131+
132+
b = Integer.parseInt(comp[2]);
133+
134+
}
135+
136+
vars.put(comp[3], a + b);
137+
break;
138+
case "GOTO":
139+
i = labels.get(comp[1]);
140+
break;
141+
case "IF":
142+
if (comp[1].compareTo("a") >= 0 && comp[1].compareTo("z") <= 0) {
143+
if (vars.containsKey(comp[1])) {
144+
a = vars.get(comp[1]);
145+
}} else {
146+
a = Integer.parseInt(comp[1]);
147+
}
148+
if (comp[2].compareTo("a") >= 0 && comp[2].compareTo("z") <= 0) {
149+
if (vars.containsKey(comp[2])) {
150+
b = vars.get(comp[2]);
151+
}} else {
152+
153+
b = Integer.parseInt(comp[2]);
154+
}
155+
//System.out.print("a="+a+"b="+b);
156+
if (a == b) {
157+
break;
158+
} else {
159+
i = endif.get(i);
160+
}
161+
ifs.push(new Integer(i));
162+
break;
163+
case "LABEL":
164+
break;
165+
case "END":
166+
if(!ifs.empty()){
167+
ifs.pop();
168+
}
169+
break;
170+
case "CONTINUE":
171+
i = loop.get(i); //line no. of if
172+
break;
173+
default:
174+
i = i; //do nothing
175+
}
176+
//System.out.println("i="+i+" flag="+vars.get("flag"));
177+
i++;
178+
}
179+
}
180+
}

0 commit comments

Comments
 (0)