您好我在java中创建了一个简单的解析器 解析像1 + 4,-5 / 3-7这样的算术表达式...... 我的问题是如何修改我的cosw 这样它也可以解析像(-3 + 6)/ 7那样的大括号...... 我的想法不清楚...... 任何人请给我一些想法,以便我能 让它工作.... 谢谢 这是我的代码
package parser;
public class Parser
{
boolean isNum(StringBuffer s)
{
try
{
Double.parseDouble(new String(s));
}
catch(NumberFormatException e)
{
return false;
}
return true;
}
double toNum(StringBuffer s)
{
return Double.parseDouble(new String(s));
}
double eval(StringBuffer exp)
{
if(isNum(exp))
{
return toNum(exp);
}
else if(!isNum(exp))
{
for(int i=exp.length()-1;i>=0;i--)
{
if(exp.charAt(i)=='/')
{
return (double)eval(new StringBuffer(exp.substring(0, i))) / eval(new StringBuffer(exp.substring(i+1,exp.length())));
}
else if(exp.charAt(i)=='*')
{
return (double)eval(new StringBuffer(exp.substring(0, i))) * eval(new StringBuffer(exp.substring(i+1,exp.length())));
}
else if(exp.charAt(i)=='-')
{
return (double)eval(new StringBuffer(exp.substring(0, i))) - eval(new StringBuffer(exp.substring(i+1,exp.length())));
}
else if(exp.charAt(i)=='+')
{
return (double)eval(new StringBuffer(exp.substring(0, i))) + eval(new StringBuffer(exp.substring(i+1,exp.length())));
}
}
}
return 0;
}
public static void main(String[] args)
{
System.out.println("Simple Expression Parser \n");
System.out.println(new Parser().eval(new StringBuffer("-1+2*3/4")));
}
}
答案 0 :(得分:2)
我在java中创建了一个简单的解析器,解析了像1 + 4,-5 / 3-7这样的算术表达式
但不正确。您尚未实现运算符优先级。
您需要查找Dijsktra Shunting-yard算法或递归下降表达式解析。在那里,您还将找到如何正确处理括号。