我不知道如何实现递归语法分析器

时间:2014-10-10 13:30:02

标签: java parsing context-free-grammar

我有以下上下文免费语法:

E = (E)
E = i | ε

给定输入String,我必须使用递归语法分析器确定此语法是否接受此String。例如,如果我有输入:

((i))<- this is valid
(((i))))<- this is invalid 
()<- this is valid

我有代码可以完成所有这些

public static boolean E() {
    int pOpen;
    pOpen = 0;
    if (lexico.equals("(")) {
        pOpen++;
        E();
    } else if (lexico.equals("i")) {
        if (pOpen == 0)
            return true; //this is valid
        else
            verifyParenthesis();
    }
}

public static boolean verifyParenthesis() {
    int pClose = 0;
    while ((lexico = nextSymbol()).equals(")"))
        pClose++;
}

但我不确定如何验证开括号(的数量与近括号)的数量相同。

我是否必须在verifyParenthesis方法上使用while

1 个答案:

答案 0 :(得分:1)

像你一样递归。享受。

public static boolean expressionIsCorrect(String expr) {
        if(!expr.contains("(") && !expr.contains(")")) {
            return true;
        }
        int indexOfLeft = -1;
        int indexOfRight = -1;
        indexOfLeft = expr.indexOf("(");
        indexOfRight = expr.lastIndexOf(")");
        if (indexOfLeft>=indexOfRight) {
            return false;
        }
        return expressionIsCorrect(expr.substring(indexOfLeft+1, indexOfRight));
    }

如果你不了解发生了什么,请不要犹豫提问,但要先尝试自己解决问题。