1
我正在使用PLY解析包含嵌套块的文件。 典型:Python PLY解析:定义范围
a {
b {
}
c {
d {
}
}
}
我用一个简单的语法像这样:
def p_nodes(p):
'''
nodes : node nodes
| node
'''
# ??
def p_node(p):
'''
node : IDENTIFIER OPEN_CURLY_BRACE node_çontent CLOSE_CURLY_BRACE
'''
p[0] = Node(p[3])#FIXME?
def p_node_content(p):
'''
node_content : nodes
|
'''
if len(p) > 1:
p[0] = p[1]
else
p[0] = None
我想知道我可以能够在解析器访问“父”节点。换句话说,我如何构建AST,以便我可以在我的示例中检索到d
是c
的孩子,该孩子本身就是a
的孩子,因为我必须知道解析器中的父规则。
我应该在p_nodes
和p_node
中输入什么信息才能建立有效的AST?谢谢。
不幸的是,分析器干不允许像'p [0] = Node(p [3],p [0])'这样的东西。此外,如果信息在创建期间尚未收集,我不会在创建AST后看到如何做到这一点。 什么也让我卡住是规则'节点:节点节点|节点“意味着在这个层次上产生的所有节点规则必须是AST中的兄弟节点,并且如果没有”范围“概念,似乎很难做到这一点,因为在解析器级别存在递归,并且在AST级别上这些节点必须处于相同的深度。 – ibi0tux
我已经更新了我的答案,应该做你想做的。告诉我你是否还有一些问题。 –
好吧,这个作品完美,你保存了我的周末,非常感谢你! 'p [0] = [p [1]] + p [2]'符号正是我所错过的。 – ibi0tux