Postfix / Infix表达式的递归算法

时间:2018-09-26 00:44:25

标签: java parsing recursion stack

所以我做了一个使用堆栈和列表的方法来做到这一点,但是我需要使用一个用于括号的递归方法来将其内容重写为后缀,然后返回解析后的表达式,将内容重写为原始表达式:

(5 + (3 * 2)+2)-1            original expression

(5 + (3 * 2)+2)              first pair of parentheses

     (3 * 2)                 second pair of parentheses

        32*                  parsed expression to postfix

   (5 + 32*+2)               first pair of parentheses with replaced content

     532*+2+                 original expression parsed

我在考虑是否可以将原始表达式发送到列表中,并使用索引来获取括号的内容来重写它们,但我不知道如何用已解析的内容替换旧内容:

public static void Parse(String infijo) {
    IterableQueueListas<String> entranceList = new IterableQueueListas<>();
    IterableQueueListas<String> exitList = new IterableQueueListas<>();
    IterableStacksListas<String> stack = new IterableStacksListas<>();

    String infix="";

    String separate[] = infix.split("(?<=[-+*/%()])|(?=[-+*/%()])");

    System.out.println(Arrays.toString(separada));
    ArrayList<String> separateArray = new ArrayList<String>(Arrays.asList(separate));

    if (separateArray.contains("(")) {

        int fristposition = separateArray.indexOf("(");
        int finalposition = separateArray.lastIndexOf(")");

        int f = finalposition;
        int z = fristposition + 1;



        List<String> recursiv = separateArray.subList(z, f);


        StringBuilder sb = new StringBuilder();
        for (String s : recursiv) {
            sb.append(s);
        }

        String subExpression = sb.toString();

        System.out.println(subExpression);


        separateArray.remove(f);
        separateArray.remove(z - 1);


        Parse(subExpression);

基本上,我想使用ArrayList替换旧表达式的括号内的解析表达式。

如果有人有建议或想法,我将不胜感激。

0 个答案:

没有答案