
232
|
第五章
使用遵守此文法的語句對語法分析器進行測試。[Page-232]
討論說明
你可能會覺得奇怪,既然要手工打造語法分析器,為什麼還要費力建立文法。首先,此
分析器並不是我撰寫的,我只是把 Daniel Lichtblau 的分析器美化一番,正經一點的理
由是,除了語法分析器,文法也可以用來建立語言生成器,生成器對於測試分析器十
分有用。以下根據 Lichtblau 實作的生成器,加以改造一番。因為善用了 Mathematica
模式匹配的功能,首先改善的 是,本文 的實作是陳述式的(declarative)而非程序式
的(procedural)。其次是生成器吸收了程式複雜度,因此文法可以繼續保持簡潔。在
Lichtblau 原本的文法中,由於程式建構的理由,文法表示非常的麻煩,例如
Hold[]
指
令及隨機選擇的實作方式。除了機率的存在外,前文所建構的文法非常乾淨,事實上它
跟 BNF 一樣易讀。如果讀者想要比較我的版本與原始的實作版本,請參考「 ...