如何在java中更改ArrayList元素的值(当indexOf不起作用时)!

时间:2016-10-15 16:30:54

标签: java parsing arraylist indexof

之前我有很多问题,但我发现的每个解决方案都涉及indexOf的使用。就像here

好吧,我正在实施一个递归下降解析器,并且在执行完每个制作后我都要打印制作,例如" A = B'令牌' (令牌的价值)C"。当制作有许多其他作品和代币时,问题就出现了,如果我在制作开始时将它打印出来,我就不具备每个代币的价值,如果我最后将它打印出来,最终的制作清单将会出现在订单不正确。

所以我做了这样的事情:

String s="";
productions.add(s);
A();
getToken();
B();
s=("A 'token' B");

你可以看到在方法A()中我也可能有类似的东西,所以我会添加很多s =""到列表,因此 indexOf 不会工作。目前我正在这样做:

String s="";
s+= productions.size();
productions.add(s);
A();
getToken();
B();
s=("A 'token' B");

但我总是觉得这个解决方案没有优雅。还有更好的方法吗?

以下是我尝试做的一个示例,请注意它不会起作用,因为您需要一个实现 nextToken 方法的词法分析器

public class parser {
    ArrayList<String> productions = new ArrayList<>();
    void S(){
        //S = A '*' B
        String s="";
        productions.add(s);
        A();
        nextToken();
        B();
        s="S = A '*' B"
        printProductions();
    }

    void A(){
        //A = 'ctn' | B
        String s="";
        productions.add(s);
        if(!currentTk=ctn){
            s="A = B
            B();
        }else{
            s="A = 'ctn'
        }
    }

    void B(){
        //B = 'ctn' '+' 'ctn'
        String s="";
        productions.add(s);
        if(currentTk=ctn){
            nextToken();
            if(currentTk=ctn){
                if(currentTk=ctn){
                    nextToken();
                    s= "'ctn' '+' 'ctn'"
                }
            }
        }
    }
}

0 个答案:

没有答案