您應該調查所謂的metacompilers,它實質上是將EBNF編譯爲遞歸下降解析器。他們如何做到這一點正是你的問題的答案。 (它很漂亮,但很好理解細節)。
一篇非常精彩的論文是Val Schorre的「MetaII」論文。這是從誠實到神的1964年的元編譯器技術。在10頁中,他向您展示瞭如何構建一個meta編譯器,並且提供了不僅如此,而且還提供了另一個編譯器以及兩者的輸出!有一個驚人的時刻,如果你去構建其中一個,你會發現如何使用自己的語法編譯自己的元編譯器。這一刻讓我想起了1970年代當我第一次翻閱這篇論文的時候,編譯器已經迷上了編譯器。這是那些計算機科學論文之一,每個人在軟件業務應該閱讀。
James Neighbors(軟件工程中術語「域」的發明者,以及第一個程序轉換系統的構建者[基於這些元編譯器]有一個偉大的在線MetaII tutorial,對於那些不想做的人-IT-從劃傷的經驗。(我什麼都沒有做這個,除了鄰居和我在大學時)。
這兩種方法都瞭解從EBNF metacompilers和生成語法分析器的好方法。
關鍵的想法是,規則的左側創建一個函數來分析非終結符,如果匹配並推進輸入流,則返回true;如果不匹配,則返回false並且輸入流不前進。 該功能的內容由右側確定。文字標記直接匹配。 非終結者會調用爲其他規則生成的其他函數。 Kleene *映射到while循環,變換映射到條件分支。 EBNF沒有解決的問題是, 和元編譯器是做什麼的,除了說「匹配」還是沒有,解析是如何做的? 祕訣在於將輸出操作編織到EBNF中。 MetaII紙使所有這些晶瑩剔透。
太棒了。感謝您的鏈接!我一定要檢查一下。 – 2010-11-08 17:00:12