-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcalc1.java
More file actions
107 lines (87 loc) · 2.91 KB
/
calc1.java
File metadata and controls
107 lines (87 loc) · 2.91 KB
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
/*
https://ruslanspivak.com/lsbasi-part1/
*/
class Solution {
public enum Type {
PLUS,
INTEGER,
EOF //End of file
}
class Token {
private Type type;
private int value;
Token(Type type, int value) {
this.type = type;
this.value = value;
}
public String toString() {
return "("+type+","+value+")";
}
}
class Interpreter {
private String text;
private int pos;
private Token currentToken;
Interpreter(String text) {
this.text = text;
this.pos = 0; //Current position to be consumed
this.currentToken = null;
}
Token getNextToken() throws Exception {
if (pos == text.length()) {
return new Token(Type.EOF, 0);
}
char currentChar = text.charAt(pos);
if (Character.isDigit(currentChar)) {
pos++;
return new Token(Type.INTEGER, currentChar - '0');
} else if (currentChar == '+') {
pos++;
return new Token(Type.PLUS, 0);
}
throw new Exception("Unregonized Character: " + currentChar);
}
void eat(Type tokenType) throws Exception {
if (currentToken.type != tokenType) {
throw new Exception("Expected token: " + tokenType + ", actual token " + currentToken.type);
}
this.currentToken = getNextToken();
}
int expr() throws Exception {
currentToken = getNextToken();
Token left = this.currentToken;
eat(Type.INTEGER);
Token op = currentToken;
eat(Type.PLUS);
Token right = currentToken;
eat(Type.INTEGER);
int result = left.value + right.value;
return result;
}
}
int calculate(String text) {
int result = 0;
Interpreter interpreter = new Interpreter(text);
try {
result = interpreter.expr();
} catch (Exception e) {
System.out.println(e);
}
return result;
}
}
public class MainClass {
public static String stringToString(String input) {
return JsonArray.readFrom("[" + input + "]").get(0).asString();
}
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = in.readLine()) != null) {
String s = stringToString(line);
int ret = new Solution().calculate(s);
String out = String.valueOf(ret);
System.out.print(out);
}
}
}