我希望编写一些递归下降解析器的伪代码。但是我没有编写此类代码的经验。我已经阅读了一些在线示例,但它们仅适用于使用数学表达式的语法。以下是我正在构建解析器的语法规则。
S -> if E then S | if E then S else S | begin S L | print E
L -> end | ; S L
E -> i
我必须编写方法S()
、L()
和E()
,并返回一些错误信息,但是我在网上找到的教程没有什么帮助。有没有人能指点我方向并给我一些示例呢?
我想用C#或Java语法编写它,因为这样更容易理解。
更新
public void S() {
if (currentToken == "if") {
getNextToken();
E();
if (currentToken == "then") {
getNextToken();
S();
if (currentToken == "else") {
getNextToken();
S();
Return;
}
} else {
throw new IllegalTokenException("Procedure S() expected a 'then' token " + "but received: " + currentToken);
} else if (currentToken == "begin") {
getNextToken();
S();
L();
return;
} else if (currentToken == "print") {
getNextToken();
E();
return;
} else {
throw new IllegalTokenException("Procedure S() expected an 'if' or 'then' or else or begin or print token " + "but received: " + currentToken);
}
}
}
public void L() {
if (currentToken == "end") {
getNextToken();
return;
} else if (currentToken == ";") {
getNextToken();
S();
L();
return;
} else {
throw new IllegalTokenException("Procedure L() expected an 'end' or ';' token " + "but received: " + currentToken);
}
}
public void E() {
if (currentToken == "i") {
getNextToken();
return;
} else {
throw new IllegalTokenException("Procedure E() expected an 'i' token " + "but received: " + currentToken);
}
}