在使用递归下降解析器检查数据是否符合语法的同时,生成解析树是否可能?
如果可以,我应该使用什么方法来构建解析树呢?
谢谢,Boda Cydo。
注意:我是新手。 (已在SO上提出了几个问题,并且我正在变得更加熟练。)
在使用递归下降解析器检查数据是否符合语法的同时,生成解析树是否可能?
如果可以,我应该使用什么方法来构建解析树呢?
谢谢,Boda Cydo。
注意:我是新手。 (已在SO上提出了几个问题,并且我正在变得更加熟练。)
是的,这是可能的。如何实现取决于您想要的具体实现方式。以下是一个可能适用于您的示例:
首先,定义您的节点:
class ParseTreeNode {
private final String name;
private final List<ParseTreeNode> children = /* new */;
public ParseTreeNode(String name) {
this.name = name;
}
public void addChild(ParseTreeNode child) {
children.add(child);
}
class RDParser {
ParseTreeNode parse(Input input) {
ParseTreeNode root = createParseTreeNodeNamed("Root")
switch (input.nextToken()) {
case OPT1:
root.addChild(createParseTreeNodeNamed("Opt1"));
break;
case OPT2:
while (/*someCondition*/) {
root.addChild(createParseTreeNodeNamed("Opt2-sibling" + /* i */));
}
case SUBTREE:
ParseTreeNode subtree = createParseTreeNodeNamed("Subtree");
root.addChild(subtree);
parseSubtree(subtree, input);
break;
default:
error("Input %s was not in the expected first/follow sets", input.nextToken());
}
}
void parseSubtree(ParseTreeNode node, Input input) {
node.addChild(createParseTreeNodeNamed("subtree-child"));
/* ... */
}
/* and other functions do similarly */
ParseTreeNode createParseTreeNodeNamed(String name) {
return new ParseTreeNode(name);
}
}
parseSubtree
可以创建并返回一个节点,然后将其添加到根节点。
parse tree
"和"abstract tree
"以及"heterogeneous
"和"homogeneous
"解析树之间的区别?(我还不知道区别,但我很想知道!) - bodacydo