0
我正在嘗試使用Bison和C創建腳本語言,我想知道是否正確構建AST。這裏是我試圖創建的樹:在Bison中創建AST
+
└─ Steps
└─ Step 1
└─ Step 2
...
└─ Step n
如果還不清楚,我想要一個包含n個步驟的節點。我現在的語法看起來像這樣:
Steps: { $$ = create_steps(); }
| Steps Step
;
Step:
IDENTIFIER StepBody { $$ = create_step($1); }
其中StepBody被解析爲像我期望的那樣的節點。在我的代碼中,我爲create_steps();
創建了一個鏈接列表,但這似乎不是實現此目的的最佳方法。
我認爲我應該有一個create_steps(node *inner_node);
函數,它接受所有Step
處理函數的輸出並將它們添加到數組中,但我不明白我該如何實現這一點。
我本來Steps
設置像這樣的野牛:
Steps:
| Steps Step { $$ = create_steps($Step); }
;
當然的,但是,那個叫create_steps
每次Step
發現這不是我要的時間。另外,我收到了一個警告,提示「輸入非終結符的空規則,並且沒有任何行爲」,這可能不是很好。
Steps: Step { $$ = create_steps($1); }
| Steps Step { $$ = create_steps($2); }
;
..然後Step
被添加到您的成長樹:在Steps
;
這不允許具有零步驟的「步驟」輸入。爲了做到這一點,請保留epsilon製作並讓它創建一個空列表。 –