將解析樹(即具體語法樹)簡化爲抽象語法樹的一般策略是什麼?如何將我的分析樹簡化爲抽象語法樹?
例如,我有以下的語法規則:
statement_list : statement
| statement_list statement
,如果留下一個解析樹,會產生煽動輸出,看起來像
program
statement_list
statement_list
statement
definition
p_type
assignment
statement
definition
statement
assign
assignment
如果我串連的孩子每個節點(因爲語句列表在解析後沒有固有含義),我可以實現以下功能
program
definition
p_type
assignment
definition
assign
assignment
這個效果很好 - 但是,我不知道這樣做的任何「規則」。我應該尋求簡化的具體語法規則嗎?這是感覺的問題,還是存在更機械的過程?
你可以去擠壓「外觀和感覺」,但主要是很多工作。您可以通過刪除可以使用語法重新生成的節點來基本上機械地完成此操作。請參閱http://stackoverflow.com/a/1916687/120163 –