Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
288 commits
Select commit Hold shift + click to select a range
15447d7
增加测试用例,修改getTop方法
miniyk2012 Apr 9, 2017
63c46f3
完成常量池解析
miniyk2012 Apr 9, 2017
2beb522
第五次作业
Ren650119726 Apr 9, 2017
1960b86
Merge pull request #70 from HarryHook/master
Apr 10, 2017
5e36919
Merge pull request #71 from miniyk2012/master
Apr 10, 2017
8a29e21
Merge pull request #2 from luoziyihao/master
Wrecksoul Apr 10, 2017
fe754de
jvm constant pool assignemnt
earlywusa Apr 10, 2017
83bb942
jvm constant pool assignment
earlywusa Apr 10, 2017
c948b46
jvm常量池
zhiyuan0101 Apr 10, 2017
e93808e
jvm常量池
zhiyuan0101 Apr 10, 2017
cae45cd
调整作业文件结构并添加第六次作业代码
SmilePoorCat Apr 10, 2017
7adfa4e
第五次作业
Ren650119726 Apr 10, 2017
14b90bc
homework of 17/4/5 first commit ,read constantpool
Wrecksoul Apr 10, 2017
0f3be2e
Merge branch 'master' of https://github.com/Wrecksoul/coding2017
Wrecksoul Apr 10, 2017
35f6dba
template
Apr 10, 2017
7a9de33
test04
Apr 10, 2017
9e4d139
Merge branch 'wizardzhang2017/master'
GordenChow Apr 11, 2017
2f81c81
增加对null的处理
zhiyuan0101 Apr 11, 2017
b16e74b
Merge branch 'master' of https://github.com/luoziyihao/coding2017.git
zhiyuan0101 Apr 11, 2017
eb0e92d
文章
zhiyuan0101 Apr 11, 2017
10c1cc1
文章
Ren650119726 Apr 11, 2017
9ef2ca0
20170411_1528 运算表达式
orajavac Apr 11, 2017
9ee3c36
加了些注释
SmilePoorCat Apr 11, 2017
e8142c7
临时提交
Apr 11, 2017
bfa4908
homeword test Past codes .
Wrecksoul Apr 12, 2017
17df039
完成jvm常量池作业
Apr 12, 2017
92a7f4a
jvm done
Apr 12, 2017
f19f62a
添加字段表和属性表的框架
Apr 12, 2017
3337260
作业暂存
Apr 13, 2017
62cd9d8
homework 17/4/13 parse for method and field ,didn't completed
Wrecksoul Apr 13, 2017
aa8a20d
修复bug
Apr 13, 2017
46791de
添加第二个作业模板
Apr 13, 2017
452797f
InfixExpr DONE
Apr 13, 2017
0e5a4fc
Merge pull request #3 from eloiseSJTU/master
orajavac Apr 14, 2017
452ee72
Update 20170326-20170402.md
Wrecksoul Apr 14, 2017
d0aa048
Update 20170402-20170409.md
Wrecksoul Apr 14, 2017
762238f
20170414_1102 jvm
orajavac Apr 14, 2017
2db74ef
完成所有jvm解析
Apr 14, 2017
10f4cdd
commit to home
Wrecksoul Apr 14, 2017
13edfd8
Merge branch 'master' of https://github.com/Wrecksoul/coding2017
Wrecksoul Apr 14, 2017
721c1b6
one bug fixed
Apr 14, 2017
1b6f4db
1
Apr 14, 2017
cddb175
bug fix
Apr 15, 2017
2c3e85f
bug fix again
Apr 15, 2017
3073522
jvm第三次作业
SmilePoorCat Apr 15, 2017
f4a4056
作业完成
Apr 15, 2017
03f2e01
Merge remote-tracking branch 'origin/master'
Apr 15, 2017
565d9ef
作业备份
GordenChow Apr 15, 2017
e761873
Merge pull request #3 from DonaldY/master
sdnb Apr 15, 2017
0174fac
提交第六周作业
GordenChow Apr 15, 2017
d1fabaf
last fix
Apr 16, 2017
6d4a599
we can do better
Apr 16, 2017
14a24de
第7周作业提交,Junit测试有点异常
gukz Apr 16, 2017
721f8c2
jvm homework, Fields and Methods parsing
earlywusa Apr 16, 2017
c56c3bf
jvm第三次作业, 属性方法 init
Apr 16, 2017
a1d23c3
test06
Apr 16, 2017
f5b7a60
Merge pull request #6 from eloiseSJTU/master
miniyk2012 Apr 16, 2017
b86ed4b
homework ,diliverd at 17/4/9.complited
Wrecksoul Apr 16, 2017
6cee27a
Merge pull request #72 from orajavac/master
Apr 16, 2017
22cabe6
Merge pull request #74 from onlyliuxin/master
Apr 16, 2017
7a2befc
增加rxjava包
miniyk2012 Apr 16, 2017
cb3fb6f
add jvm_3
harryhook Apr 16, 2017
ba473c0
add InfixExpr
harryhook Apr 16, 2017
3ee3ff1
4-16 jvm第三次作业
Ren650119726 Apr 16, 2017
60763b0
Merge pull request #3 from eloiseSJTU/master
harryhook Apr 16, 2017
5c9b6dd
完成jvm第一周所有作业
zzJohnH Apr 16, 2017
3fc8b78
jvm第三次作业, 基本框架
Apr 17, 2017
c7c0d3f
Merge pull request #3 from zavier/master
PigTS Apr 17, 2017
2f8153b
Merge pull request #77 from onlyliuxin/master
zavier Apr 17, 2017
998571f
Merge pull request #62 from johnChnia/master
DonaldY Apr 17, 2017
83e9793
Merge branch 'master' of https://github.com/onlyliuxin/coding2017
DonaldY Apr 17, 2017
db9ab4e
测试错误纠正
SmilePoorCat Apr 17, 2017
7b00c6f
homework helper
DonaldY Apr 17, 2017
e52aa3c
update infixExpr.java complete InfixExpression's evaluate
Wrecksoul Apr 17, 2017
7591001
coding
zjhylove Apr 17, 2017
04ba9f6
中缀表达式求值
miniyk2012 Apr 17, 2017
66632c0
Merge pull request #46 from GordenChow/master
wizardzhang2017 Apr 17, 2017
06f916a
Merge pull request #48 from SmilePoorCat/master
wizardzhang2017 Apr 17, 2017
159838d
new work
onlyLYJ Apr 17, 2017
b50c155
Merge pull request #49 from onlyliuxin/master
wizardzhang2017 Apr 17, 2017
f33c437
第六周作业
ThomasChant Apr 17, 2017
4fd8d2a
修改gitignore
miniyk2012 Apr 17, 2017
5e295e3
Merge pull request #75 from HarryHook/master
Apr 17, 2017
eb7b3fb
Merge pull request #76 from miniyk2012/master
Apr 17, 2017
b62b5fb
添加4月16日作业框架
Apr 17, 2017
3143677
Merge pull request #64 from sdnb/master
DonaldY Apr 18, 2017
4e23f27
Merge pull request #3 from wizardzhang2017/master
SmilePoorCat Apr 18, 2017
270a3ff
revert change
Apr 18, 2017
bcf3efd
javap done
Apr 18, 2017
08b8f7d
Merge branch 'wizardzhang2017/master'
GordenChow Apr 18, 2017
7fbba66
作业代码保存
TerrenceWen0832 Apr 18, 2017
fd3c301
Merge pull request #65 from macvis/master
DonaldY Apr 18, 2017
45592fb
20170418_1503 前,后序表达式
orajavac Apr 18, 2017
5526e68
Merge pull request #4 from eloiseSJTU/master
orajavac Apr 18, 2017
6bbe543
Merge pull request #4 from eloiseSJTU/master
harryhook Apr 18, 2017
8c36d35
Merge pull request #77 from orajavac/master
Apr 18, 2017
ef2d7a1
Merge pull request #78 from onlyliuxin/master
Apr 18, 2017
9512e53
update jvm
harryhook Apr 18, 2017
99d2617
Merge branch 'master' of https://github.com/HarryHook/coding2017
harryhook Apr 18, 2017
1a4353d
Merge pull request #5 from eloiseSJTU/master
orajavac Apr 18, 2017
4edd218
Merge pull request #5 from eloiseSJTU/master
harryhook Apr 18, 2017
814cb27
暂存作业
Apr 18, 2017
dca236e
Infix Postfix Prefix finished
DonaldY Apr 18, 2017
dd5ab28
Merge branch 'master' of github.com:DonaldY/coding2017
DonaldY Apr 18, 2017
311d8bf
Merge pull request #3 from guodongym/master
maishihang Apr 18, 2017
862e57f
Merge remote-tracking branch 'refs/remotes/guodongym/master'
maishihang Apr 18, 2017
5066bfd
4-16
Apr 18, 2017
1882b98
coding
zjhylove Apr 18, 2017
83fb8ce
coding
zjhylove Apr 19, 2017
c7dca4a
Merge pull request #47 from onlyliuxin/master
honokaBiu Apr 19, 2017
e94ce79
add PrefixExpr
harryhook Apr 19, 2017
5d373ae
Merge pull request #2 from DonaldY/master
EtheriousNatsu Apr 19, 2017
0416766
完成字节码命令的解析
Apr 19, 2017
67a8b47
暂存
Apr 19, 2017
ed72c10
数据结构代码更新
SmilePoorCat Apr 19, 2017
0030da6
add count
luoziyihao Apr 19, 2017
1f4be5b
完成jvm第四次作业中的jvm部分
zavier Apr 19, 2017
02a464b
后前缀表达式
Apr 19, 2017
bf87a11
完成prefix,postfix
zzJohnH Apr 19, 2017
cc76d7c
Update 20170402-20170409.md
earlywusa Apr 19, 2017
65ea9b2
文章
Ren650119726 Apr 20, 2017
1bcda9e
Merge pull request #66 from Ren650119726/patch-2
luoziyihao Apr 20, 2017
c07ace9
Merge pull request #65 from Wrecksoul/master
luoziyihao Apr 20, 2017
5560343
Merge pull request #64 from williamgx8/master
luoziyihao Apr 20, 2017
fcecfdf
Merge pull request #63 from Ren650119726/patch-1
luoziyihao Apr 20, 2017
0b85735
Merge pull request #62 from guoshenghui/master
luoziyihao Apr 20, 2017
2a01f09
Merge pull request #61 from Ren650119726/master
luoziyihao Apr 20, 2017
ed1f136
Merge pull request #60 from 12378wzy/master
luoziyihao Apr 20, 2017
b84d4ea
Merge branch 'master' into 1282579502-Branch
luoziyihao Apr 20, 2017
6969d00
Merge pull request #59 from earlywusa/1282579502-Branch
luoziyihao Apr 20, 2017
b22edf1
添加打印常量池部分(模仿javap指令打印的)
zavier Apr 20, 2017
e745a5f
Merge pull request #7 from zavier/master
Viscaria233 Apr 20, 2017
e334b64
第四次jvm作业
zjhylove Apr 20, 2017
f2b5091
homework complete!
zjhylove Apr 20, 2017
3721695
Merge remote-tracking branch 'refs/remotes/origin/master' into guodon…
zjhylove Apr 20, 2017
8e1a1ea
move InfixExpr
Viscaria233 Apr 20, 2017
cf675c2
finish byte code command parsing
Viscaria233 Apr 20, 2017
d50051f
finish byte code command parsing
Viscaria233 Apr 20, 2017
80fa240
jvm第四次作业(添加数据结构部分)
zavier Apr 20, 2017
43607d3
完成中序表达式
zzJohnH Apr 20, 2017
bf84de2
jvm 字节码指令
Apr 20, 2017
8bdf0c6
jvm第三次作业, 方法解析done
Apr 21, 2017
aaf64e8
前序后序计算表达式
SmilePoorCat Apr 21, 2017
133fbe6
中序转后序,中序转前序表达式
SmilePoorCat Apr 21, 2017
fa6590f
暂存
Apr 21, 2017
fb66d26
update min-jvm
DonaldY Apr 21, 2017
c2bdaa8
modify InfixExpr using Token & TokenParser
Viscaria233 Apr 21, 2017
44e0580
make InfixExpr to ignore invisiable chars
Viscaria233 Apr 21, 2017
8bcfc5e
refactor InfixExpr
Viscaria233 Apr 21, 2017
a806293
finish PostfixExpr
Viscaria233 Apr 21, 2017
c32d893
finish PrefixExpr
Viscaria233 Apr 21, 2017
ca83f60
添加打印框架
Apr 21, 2017
8324f22
jvm第三次作业, 运算式计算
Apr 21, 2017
2634c99
add toHexString(byte[])
Viscaria233 Apr 21, 2017
c9c03bc
finish constant pool printing
Viscaria233 Apr 21, 2017
91e46e6
finish InfixToPostfix
Viscaria233 Apr 22, 2017
813e332
Merge pull request #4 from DonaldY/master
sdnb Apr 22, 2017
7a922e2
中序表达式重构
ThomasChant Apr 22, 2017
886625e
update jvm the 2 work
maishihang Apr 22, 2017
588cd5e
Merge branch 'master' of https://github.com/maishihang/coding2017
maishihang Apr 22, 2017
cd642e8
完成javap打印
Apr 22, 2017
64c602a
jvm第四次作业
Apr 22, 2017
fe49c69
seventh homework finished
DonaldY Apr 22, 2017
29cf9c9
Merge pull request #78 from dutekt/jvm_week3
zavier Apr 22, 2017
1fe0f55
Merge pull request #79 from Viscaria233/master
zavier Apr 22, 2017
6aa54b1
暂存
Apr 22, 2017
7b9535d
Token parser done
Apr 23, 2017
a11836e
Merge pull request #59 from onlyLYJ/master
guodongym Apr 23, 2017
8d0efff
Merge pull request #60 from GUK0/master
guodongym Apr 23, 2017
65749a8
Merge pull request #61 from loveyuanyuanisluckly/master
guodongym Apr 23, 2017
cd37e66
Merge pull request #62 from onlyliuxin/master
guodongym Apr 23, 2017
bbc1334
4.23作业
jjyyjjyy Apr 23, 2017
a8b2cb4
完成4月16作业
Apr 23, 2017
e4d42eb
Only data struct
RalfNick Apr 23, 2017
d6e495d
test07
Apr 23, 2017
ae3aef5
jvm第四次作业
lzbferrari Apr 23, 2017
80c5c9b
第六周作业
PigTS Apr 23, 2017
c323730
Merge pull request #80 from HuiZhou-Xmu/master
zavier Apr 23, 2017
704d4b0
printer
Apr 23, 2017
fa3840c
Merge pull request #66 from johnChnia/master
DonaldY Apr 23, 2017
764d205
Merge pull request #67 from lzbferrari/master
DonaldY Apr 23, 2017
5e88c64
compele jvm the second work
maishihang Apr 23, 2017
d5cd0b1
后缀/前缀/中缀转后缀
ThomasChant Apr 23, 2017
54ac61a
javap
ThomasChant Apr 23, 2017
aca3a17
jvm字节码指令解析
ThomasChant Apr 23, 2017
7bc6abc
Merge pull request #31 from xukaide77/master
zeyuanpinghe Apr 24, 2017
c866a88
数据结构作业
onlyliuxin Apr 24, 2017
e1798d0
refactor
onlyliuxin Apr 24, 2017
a910d77
Merge pull request #48 from RalfNick/master
honokaBiu Apr 24, 2017
e062976
refactor
onlyliuxin Apr 24, 2017
76c3753
20170424_1007 jvm
orajavac Apr 24, 2017
67a8222
Merge pull request #81 from onlyliuxin/master
zavier Apr 24, 2017
1208fb8
表达式求值
harryhook Apr 24, 2017
d0aed33
add jvm_4
harryhook Apr 24, 2017
18f0c6c
add queue
harryhook Apr 24, 2017
c38a659
Merge pull request #61 from jy97799/master
jodie-zss Apr 24, 2017
bf8da40
Merge pull request #68 from ipk2015/master
DonaldY Apr 24, 2017
b18ef2b
Merge pull request #69 from sdnb/master
DonaldY Apr 24, 2017
00fd5ea
Merge branch 'master' of https://github.com/onlyliuxin/coding2017
DonaldY Apr 24, 2017
7dce41b
Merge branch 'master' of github.com:DonaldY/coding2017
DonaldY Apr 24, 2017
699b8c2
CircleQueue finished
DonaldY Apr 24, 2017
6e777c5
添加4月23作业模板
Apr 24, 2017
3e956cb
datastructure finished
DonaldY Apr 24, 2017
1c826c1
JVM第五周作业提交
GordenChow Apr 24, 2017
ccdb524
InfixToPostFix
onlyliuxin Apr 24, 2017
9000126
eighthweek homework
DonaldY Apr 25, 2017
9f8ce4e
20170424_1110 数据结构
orajavac Apr 25, 2017
f622e29
暂存
Apr 25, 2017
0e272c9
update
DonaldY Apr 25, 2017
05a8b2d
修改注释
guodongym Apr 25, 2017
02c15e8
update jvm the third work
maishihang Apr 25, 2017
33ac13a
Merge pull request #79 from orajavac/master
Apr 25, 2017
280c488
Merge pull request #80 from HarryHook/master
Apr 25, 2017
5eef63f
Merge pull request #63 from maishihang/master
guodongym Apr 26, 2017
b21c0e4
Merge pull request #64 from onlyliuxin/master
guodongym Apr 26, 2017
d1b4281
Merge pull request #51 from SmilePoorCat/master
wizardzhang2017 Apr 26, 2017
6121f13
Merge pull request #52 from GordenChow/master
wizardzhang2017 Apr 26, 2017
22e1be0
Merge pull request #53 from onlyliuxin/master
wizardzhang2017 Apr 26, 2017
417d7ca
完成数据结构作业
Apr 26, 2017
e12f519
Merge pull request #67 from williamgx8/master
luoziyihao Apr 26, 2017
4086f77
Merge pull request #68 from guoshenghui/master
luoziyihao Apr 26, 2017
f27dcfa
add home work count
luoziyihao Apr 26, 2017
d509bb4
Merge branch 'master' of https://github.com/kingkeivn/coding2017
zeyuanpinghe Apr 26, 2017
9d5690b
com
luoziyihao Apr 26, 2017
45e5f9d
Merge remote-tracking branch 'liuxin/master'
luoziyihao Apr 26, 2017
951410b
refactor
luoziyihao Apr 26, 2017
398363a
add homework 0326
luoziyihao Apr 27, 2017
76b3896
add homework 0326-1
luoziyihao Apr 27, 2017
e351d94
add mini-jvm test
onlyliuxin Apr 27, 2017
e26a18f
Merge pull request #191 from kingkeivn/master
onlyliuxin Apr 27, 2017
d52c59a
Merge pull request #190 from jodie-zss/master
onlyliuxin Apr 27, 2017
5ce236c
Merge pull request #189 from wizardzhang2017/master
onlyliuxin Apr 27, 2017
123e558
Merge pull request #188 from zavier/master
onlyliuxin Apr 27, 2017
98934f5
Merge pull request #187 from guodongym/master
onlyliuxin Apr 27, 2017
35e11d0
Merge branch 'master' of https://github.com/onlyliuxin/coding2017
DonaldY Apr 27, 2017
53a0839
Merge pull request #184 from luoziyihao/master
onlyliuxin Apr 27, 2017
fe2e9c3
Merge pull request #182 from DonaldY/master
onlyliuxin Apr 27, 2017
5b88f6b
Merge pull request #180 from eloiseSJTU/master
onlyliuxin Apr 27, 2017
714956c
Delete description.html
onlyliuxin Apr 27, 2017
c26fb8a
Delete description.html
onlyliuxin Apr 27, 2017
d7eb24e
第二次作业
onlyliuxin Apr 27, 2017
5715e36
Merge branch 'master' of https://github.com/onlyliuxin/coding2017.git
onlyliuxin Apr 27, 2017
b4213a7
remove virus
onlyliuxin Apr 27, 2017
a566d81
Merge pull request #49 from onlyliuxin/master
honokaBiu Apr 27, 2017
809a389
jvm5
Apr 28, 2017
4c410e3
delete virus
chzh55 Apr 28, 2017
7f79869
Merge remote-tracking branch 'upstream/master'
chzh55 Apr 28, 2017
ab84d70
Merge pull request #32 from xukaide77/master
zeyuanpinghe Apr 28, 2017
aad5216
Merge pull request #195 from kingkeivn/master
onlyliuxin Apr 28, 2017
7132e32
Merge pull request #194 from honokaBiu/master
onlyliuxin Apr 28, 2017
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
150 changes: 150 additions & 0 deletions group01/1814014897/zhouhui/src/week06/expr/InfixExpr.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
package week06.expr;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class InfixExpr {
String expr = null;

public InfixExpr(String expr) {
this.expr = expr;
}

public float evaluate() {
float result = 0;

Stack operandStack = new Stack(); // 运算数栈
Stack operaterStack = new Stack(); // 运算符栈

char[] exprCharArr = expr.toCharArray();
List<String> exprStringList = new ArrayList<String>();
addOperandAndOperater(exprCharArr, exprStringList);

for (int i = 0; i < exprStringList.size(); i++) {
if (isOperand(exprStringList.get(i))) {
operandStack.push(exprStringList.get(i));
} else if (isOperater(exprStringList.get(i))) {
operaterStack.push(exprStringList.get(i));
} else {
throw new RuntimeException("this operater has not yet implemented.");
}

if (operaterStack.size() == 2) {

String operater_1 = (String) operaterStack.pop();
String operater_2 = (String) operaterStack.pop();
if (hasTheSameOrHighPriority(operater_2, operater_1)) {

String operand_1 = (String) operandStack.pop();
String operand_2 = (String) operandStack.pop();
operation(operandStack, operater_2, operand_1, operand_2);

operaterStack.push(operater_1);
} else if (hasTheLowPriority(operater_2, operater_1)) {

operandStack.push(exprStringList.get(++i));
String operand_1 = (String) operandStack.pop();
String operand_2 = (String) operandStack.pop();
operation(operandStack, operater_1, operand_1, operand_2);

operaterStack.push(operater_2);
}
}

if (i == exprStringList.size() - 1) {

String operater = (String) operaterStack.pop();
String operand_1 = (String) operandStack.pop();
String operand_2 = (String) operandStack.pop();
operation(operandStack, operater, operand_1, operand_2);

result = (float) Integer.parseInt((String) operandStack.pop());
}
}

return result;
}

private void addOperandAndOperater(char[] exprCharArr, List<String> exprStringList) {
for (int i = 0; i < exprCharArr.length; i++) {
if (isOperand(exprCharArr[i])) {
StringBuilder sb = new StringBuilder();
sb.append(exprCharArr[i]);
if (i < exprCharArr.length - 1) {
while (i < exprCharArr.length - 1 && isOperand(exprCharArr[i + 1])) {
sb.append(exprCharArr[i + 1]);
i++;
}
}
exprStringList.add(sb.toString());
} else if (isOperater(exprCharArr[i])) {
exprStringList.add(exprCharArr[i] + "");
}
}
}

private boolean isOperand(char c) {
return !isOperater(c);
}

private boolean isOperater(char c) {
if (c == '+' || c == '-' || c == '*' || c == '/') {
return true;
}
return false;
}

private boolean isOperand(String c) {
return !isOperater(c);
}

// 字符串相等用equals()比较.
private boolean isOperater(String c) {
if (c.equals("+") || c.equals("-") || c.equals("*") || c.equals("/")) {
return true;
}
return false;
}

// operater_1 has the same or high priority compare with the operater_2.
private boolean hasTheSameOrHighPriority(Object operater_1, Object operater_2) {
if ((operater_1.equals("+") && operater_2.equals("+")) || (operater_1.equals("+") && operater_2.equals("-"))
|| (operater_1.equals("-") && operater_2.equals("+"))
|| (operater_1.equals("-") && operater_2.equals("-"))
|| (operater_1.equals("*") && operater_2.equals("*"))
|| (operater_1.equals("*") && operater_2.equals("/"))
|| (operater_1.equals("/") && operater_2.equals("*"))
|| (operater_1.equals("/") && operater_2.equals("/"))
|| (operater_1.equals("*") && operater_2.equals("+"))
|| (operater_1.equals("*") && operater_2.equals("-"))
|| (operater_1.equals("/") && operater_2.equals("+"))
|| (operater_1.equals("/") && operater_2.equals("-"))) {
return true;
}
return false;
}

//// operater_1 has the low priority compare with the operater_2.
private boolean hasTheLowPriority(Object operater_1, Object operater_2) {
if ((operater_1.equals("+") && operater_2.equals("*")) || (operater_1.equals("+") && operater_2.equals("/"))
|| (operater_1.equals("-") && operater_2.equals("*"))
|| (operater_1.equals("-") && operater_2.equals("/"))) {
return true;
}
return false;
}

private void operation(Stack operandStack, String operater, String operand_1, String operand_2) {
if (operater.equals("+")) {
operandStack.push((Integer.parseInt(operand_2) + Integer.parseInt(operand_1)) + "");
} else if (operater.equals("-")) {
operandStack.push((Integer.parseInt(operand_2) - Integer.parseInt(operand_1)) + "");
} else if (operater.equals("*")) {
operandStack.push((Integer.parseInt(operand_2) * Integer.parseInt(operand_1)) + "");
} else if (operater.equals("/")) {
operandStack.push((Integer.parseInt(operand_2) / Integer.parseInt(operand_1)) + "");
}
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package algorithm;
package week06.expr;

import org.junit.After;
import org.junit.Assert;
Expand All @@ -17,7 +17,7 @@ public void tearDown() throws Exception {
}

@Test
public void testEvaluate() throws InfixExpr.CalculateException {
public void testEvaluate() {
//InfixExpr expr = new InfixExpr("300*20+12*5-20/4");
{
InfixExpr expr = new InfixExpr("2+3*4+5");
Expand Down
19 changes: 19 additions & 0 deletions group01/1814014897/zhouhui/src/week06/jvm/attr/AttributeInfo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package week06.jvm.attr;

public abstract class AttributeInfo {
public static final String CODE = "Code";
public static final String CONST_VALUE = "ConstantValue";
public static final String EXCEPTIONS = "Exceptions";
public static final String LINE_NUM_TABLE = "LineNumberTable";
public static final String LOCAL_VAR_TABLE = "LocalVariableTable";
public static final String STACK_MAP_TABLE = "StackMapTable";
int attrNameIndex;
int attrLen ;
public AttributeInfo(int attrNameIndex, int attrLen) {

this.attrNameIndex = attrNameIndex;
this.attrLen = attrLen;
}


}
93 changes: 93 additions & 0 deletions group01/1814014897/zhouhui/src/week06/jvm/attr/CodeAttr.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package week06.jvm.attr;

import week06.jvm.clz.ClassFile;
import week06.jvm.constant.ConstantPool;
import week06.jvm.loader.ByteCodeIterator;

public class CodeAttr extends AttributeInfo {
private int maxStack;
private int maxLocals;
private int codeLen;
private String code;

public String getCode() {
return code;
}

// private ByteCodeCommand[] cmds ;
// public ByteCodeCommand[] getCmds() {
// return cmds;
// }
private LineNumberTable lineNumTable;
private LocalVariableTable localVarTable;
private StackMapTable stackMapTable;

public CodeAttr(int attrNameIndex, int attrLen, int maxStack, int maxLocals, int codeLen,
String code /* ByteCodeCommand[] cmds */) {
super(attrNameIndex, attrLen);
this.maxStack = maxStack;
this.maxLocals = maxLocals;
this.codeLen = codeLen;
this.code = code;
// this.cmds = cmds;
}

public void setLineNumberTable(LineNumberTable t) {
this.lineNumTable = t;
}

public void setLocalVariableTable(LocalVariableTable t) {
this.localVarTable = t;
}

public static CodeAttr parse(ClassFile clzFile, ByteCodeIterator iter) {
int attrNameIndex = iter.nextU2ToInt();
int attrLen = iter.nextU4ToInt();
int maxStack = iter.nextU2ToInt();
int maxLocals = iter.nextU2ToInt();
int codeLen = iter.nextU4ToInt();

String code = iter.nextUxToHexString(codeLen);

System.out.println(code);

CodeAttr codeAttr = new CodeAttr(attrNameIndex, attrLen, maxStack, maxLocals, codeLen, code);

int exceptionTableLen = iter.nextU2ToInt();

if (exceptionTableLen > 0) {
String exTable = iter.nextUxToHexString(exceptionTableLen);
System.out.println("Encountered exception table,just ignore it");
}

int subAttrCount = iter.nextU2ToInt();

for (int i = 1; i <= subAttrCount; i++) {
int subAttrIndex = iter.nextU2ToInt();
String subAttrName = clzFile.getConstantPool().getUTF8String(subAttrIndex);

iter.back(2);

if (AttributeInfo.LINE_NUM_TABLE.equalsIgnoreCase(subAttrName)) {
LineNumberTable t = LineNumberTable.parse(iter);
codeAttr.setLineNumberTable(t);
} else if (AttributeInfo.LOCAL_VAR_TABLE.equalsIgnoreCase(subAttrName)) {
LocalVariableTable t = LocalVariableTable.parse(iter);
codeAttr.setLocalVariableTable(t);
} else if (AttributeInfo.STACK_MAP_TABLE.equalsIgnoreCase(subAttrName)) {
StackMapTable t = StackMapTable.parse(iter);
codeAttr.setStackMapTable(t);
} else {
throw new RuntimeException("Need code to process " + subAttrName);
}
}

return codeAttr;
}

private void setStackMapTable(StackMapTable t) {
this.stackMapTable = t;

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package week06.jvm.attr;

import java.util.ArrayList;
import java.util.List;

import week06.jvm.loader.ByteCodeIterator;

public class LineNumberTable extends AttributeInfo {
List<LineNumberItem> items = new ArrayList<LineNumberItem>();

private static class LineNumberItem{
int startPC;
int lineNum;
public int getStartPC() {
return startPC;
}
public void setStartPC(int startPC) {
this.startPC = startPC;
}
public int getLineNum() {
return lineNum;
}
public void setLineNum(int lineNum) {
this.lineNum = lineNum;
}
}
public void addLineNumberItem(LineNumberItem item){
this.items.add(item);
}
public LineNumberTable(int attrNameIndex, int attrLen) {
super(attrNameIndex, attrLen);

}

public static LineNumberTable parse(ByteCodeIterator iter){
int index = iter.nextU2ToInt();
int len = iter.nextU4ToInt();

LineNumberTable table = new LineNumberTable(index, len);

int itemLen = iter.nextU2ToInt();

for(int i=1;i<=itemLen;i++){
LineNumberItem item = new LineNumberItem();
item.setStartPC(iter.nextU2ToInt());
item.setLineNum(iter.nextU2ToInt());
table.addLineNumberItem(item);
}
return table;
}



}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package week06.jvm.attr;

public class LocalVariableItem {
private int startPC;
private int length;
private int nameIndex;
private int descIndex;
private int index;
public int getStartPC() {
return startPC;
}
public void setStartPC(int startPC) {
this.startPC = startPC;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public int getNameIndex() {
return nameIndex;
}
public void setNameIndex(int nameIndex) {
this.nameIndex = nameIndex;
}
public int getDescIndex() {
return descIndex;
}
public void setDescIndex(int descIndex) {
this.descIndex = descIndex;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
Loading