【发布时间】:2017-06-03 01:39:38
【问题描述】:
当我输入3(5) 之类的内容时,我的代码失败了。
如何修改我的代码,使其在中间的表达式中求解然后相乘?
double parseTerm() {
double x = parseFactor();
while(true) {
if (shift('*')){
x *= parseFactor(); // multiply
}
else if (shift('/')){
x /= parseFactor(); // divide
}
else{
return x;
}
}
}
double parseExpression() {
double x = parseTerm();
while(true) {
if (shift('+')){
x += parseTerm(); // addition
}
else if (shift('-')){
x -= parseTerm(); // subtraction
}
else{
return x;
}
}
}
double parseFactor() {
if (shift('+')){
return parseFactor(); //plus
}
if (shift('-')){
return -parseFactor(); //minus
}
double x;
int startPos = this.pos;
if (shift('(')) { // brackets
x = parseExpression();
shift(')');
【问题讨论】:
-
为什么这个标签同时带有 Java 和 JavaScript 的标签?
-
请发布minimal reproducible example - minimal 和 complete - 上面的代码不完整,我认为不完整最小的。然后进行自己的尝试 - 如果它不起作用,请详细说明您尝试了什么以及出了什么问题。作为提示 - 如果您希望左括号
(充当事实上的乘法运算符,那么您需要在parseTerm方法中的子表达式中添加类似parseFactor方法中的内容。 -
3(5)根据您的代码不是合法输入。你的意思是3*(5)?
标签: java parsing operator-precedence recursive-descent