1
我有以下上下文無關文法:我不知道如何實現一個遞歸語法分析器
E = (E)
E = i | ε
給定的輸入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
嗎?
你可以使用堆棧。 – blackSmith 2014-10-10 13:31:54
我想你想要一個**遞歸下降解析器**;這應該有助於搜索。 – 2014-10-10 13:38:20
您的E()方法創建無限遞歸,因爲沒有方法參數或變量條件,這會影響lexico。 – 2014-10-10 13:42:15