1
我會爲一個非常簡單的遞歸語法提取抽象語法樹,例如對於C函數調用語句爲 。我已經將語法定義爲:如何用pyparsing構建一個簡單的AST
name = Word(srange("[a-z]"), srange("[a-zA-Z0-9_]"))
func_args = Forward()
func_call = (name + "(" + func_args + ZeroOrMore(Word(",") + func_args) + ")").setParseAction(create_node)
func_args <<= (func_call | name)
res = func_call.parseString("func1(func2(v1,func3(v2,v3)))", True)
解析是可以的,但我無法弄清楚創建AST的最佳方法。
我想在這個例子中的字符串這是什麼AST:
func1
- func2
- v1
- func3
- v2
- v3
假設我有一個類tree
。當爲第一個func3(v2, v3)
調用回調create_node
時,我應該創建節點func3
與孩子v2
和v3
等etc直到外語句被解析。這是最好的方法?謝謝