Java 可以用大括号解析表达式的解析器
嗨,我用java做了一个简单的解析器 解析算术表达式,如1+4、-5/3-7。。。 我的问题是如何修改我的cosw 所以它也可以解析大括号,比如-3+6/7。。。 我的想法不清楚。。。。。。 任何人请给我一些想法,这样我就可以 让它工作。。。。 非常感谢。 这是我的密码Java 可以用大括号解析表达式的解析器,java,parsing,Java,Parsing,嗨,我用java做了一个简单的解析器 解析算术表达式,如1+4、-5/3-7。。。 我的问题是如何修改我的cosw 所以它也可以解析大括号,比如-3+6/7。。。 我的想法不清楚。。。。。。 任何人请给我一些想法,这样我就可以 让它工作。。。。 非常感谢。 这是我的密码 package parser; public class Parser { boolean isNum(StringBuffer s) { try { Do
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")));
}
}
我用java做了一个简单的解析器,它解析算术表达式,比如1+4、-5/3-7
但这并不正确。您尚未实现运算符优先级
您需要查找Dijsktra调车场算法或递归下降表达式解析。在这里,您还将了解如何正确处理括号 抱歉…即使我添加了代码标记,它也会丢失缩进:。但请参见dic中的问题。。它的格式很巧妙,我有一个表达式,表示您的解析器没有正确应用优先级规则。@LutzHorn它根本没有应用运算符优先级规则,更不用说正确了。如果我的实现没有应用运算符优先级,请告诉我怎么做……不如阅读EJP建议的材料,然后具体询问您遇到问题的部分。它会告诉你怎么做。你已经做了什么?你对什么感到困惑?你的问题是什么?对如何实现感到困惑,你是否太费劲去写一个完整的句子?如果你没有提出一个恰当的问题,你就无法理性地期待得到一个恰当的答案。这些都是非常著名的算法,在许多容易获得的资料中都有解释。“关于如何实现的困惑”不是一句话,也不是一个问题描述,如果没有更多的信息,我也无法理解。这两种算法都有几种语言的源代码在互联网上可用,还有非常清晰的解释,经过长时间的润色。没有什么比维基百科文章更有用的了。给我们看一些你读过的证据怎么样?也许我读错了。我自己也读过这些文章,由于我没有太多的编码经验,我设法制作了这个虚拟解析器。我只是对它感兴趣。。