如果我要创建一个接受状态(名称)的下推式自动化,那些状态接受转换(input,pop,push,nextState)。这一切如何帮助我构建一个解析树?
我的意思是下推自动机非常适合检查语言中是否有某些东西,比如一系列令牌或其他什么是正确的顺序......但是语法树?
我的意思是考虑以下示例:
Foo {
Woo {
Hello World
}
}
pda只能记住堆栈中的顶级项目和当前输入。我该怎么建造这棵树?我应该将PDA与递归结合起来吗?
答案 0 :(得分:1)
从广义上讲,堆栈中的每个项目都包含一个语法子树列表。当您按下一个新项目时,其列表将从空开始。转移(使用)令牌时,将其添加到此列表中。当您弹出时,您将获取顶部项目列表中的所有子树,将它们设置为新节点的子项,并将此新子树添加到项目堆栈的新顶部列表中。最后,当您从堆栈中弹出最后一项时,您最终会得到一个子树,这将是整个语法树。