Java 可以用大括号解析表达式的解析器

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

嗨,我用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")));
    }
}
我用java做了一个简单的解析器,它解析算术表达式,比如1+4、-5/3-7

但这并不正确。您尚未实现运算符优先级


您需要查找Dijsktra调车场算法或递归下降表达式解析。在这里,您还将了解如何正确处理括号

抱歉…即使我添加了代码标记,它也会丢失缩进:。但请参见dic中的问题。。它的格式很巧妙,我有一个表达式,表示您的解析器没有正确应用优先级规则。@LutzHorn它根本没有应用运算符优先级规则,更不用说正确了。如果我的实现没有应用运算符优先级,请告诉我怎么做……不如阅读EJP建议的材料,然后具体询问您遇到问题的部分。它会告诉你怎么做。你已经做了什么?你对什么感到困惑?你的问题是什么?对如何实现感到困惑,你是否太费劲去写一个完整的句子?如果你没有提出一个恰当的问题,你就无法理性地期待得到一个恰当的答案。这些都是非常著名的算法,在许多容易获得的资料中都有解释。“关于如何实现的困惑”不是一句话,也不是一个问题描述,如果没有更多的信息,我也无法理解。这两种算法都有几种语言的源代码在互联网上可用,还有非常清晰的解释,经过长时间的润色。没有什么比维基百科文章更有用的了。给我们看一些你读过的证据怎么样?也许我读错了。我自己也读过这些文章,由于我没有太多的编码经验,我设法制作了这个虚拟解析器。我只是对它感兴趣。。