【发布时间】:2017-04-03 22:00:22
【问题描述】:
我希望编写一些递归下降解析器的伪代码。现在,我对这种类型的编码没有经验。我在网上阅读了一些示例,但它们仅适用于使用数学表达式的语法。这是我作为解析器基础的语法。
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);
}
}
【问题讨论】:
-
我强烈建议阅读Compilers: Principles, Techniques, and Tools 以更好地掌握递归下降(和 LR)解析工具。它写得很好,提供了令人印象深刻的语言识别广度。
-
我强烈建议您查看Wikipedia recursive descent parsing 页面底部的外部链接也会有所帮助。
标签: parsing recursion recursive-descent