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