我有以下上下文免费语法:
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
?
答案 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));
}
如果你不了解发生了什么,请不要犹豫提问,但要先尝试自己解决问题。