2010-01-26 60 views
0

我下面「編程語言:適用和解釋」另一個方案初學者問題

http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-04-26/plai-2007-04-26.pdf(第21頁)

現在我工作的第21頁,所有的測試用例。 我只能通過第一個,而具有「with」的所有測試用例都失敗了。我意識到我的解析器沒有語句來處理「with」。

這是我在解析器時刻:

(define (parse sexp) 
    (cond 
    [(number? sexp)(num sexp)] 
    [(list? sexp) 
    (case (first sexp) 
     [(+) (add (parse (second sexp)) 
       (parse (third sexp)))] 
     [(-) (sub (parse (second sexp)) 
       (parse (third sexp)))])])) 

所以,請你幫忙是因爲它導致我上面的測試失敗,這個解析功能? 謝謝。

回答

3

你的解析器遠非完整解析器,所以試圖處理with的實際實現並不是你應該嘗試的事情。如果你在某個課程的背景下學習,你肯定需要諮詢課程人員。如果你自己嘗試這樣做,那麼你需要慢慢採取行動,並確保你有一個工作解析器,然後再到代碼的其餘部分。

一個可以幫助你的資源是我的class notes,它包含了這樣的解析器的例子。 (我只是在今天的材料中說明了這一點),但是如果你真的使用它,那麼你應該注意它在許多方面與PLAI代碼不同 - 語言是一種類型化的語言,不是簡單的計劃;我們編寫的解析器使用match,並且程序的整個組織略有不同。不過,如果你自己這樣做,它應該給你一個粗略的想法,然後卡住。

1

其實,如果你看過進一步上,

正當我們以爲我們做了,我們發現,對上述幾個測試用例(你可以決定哪些?)生成一個自由的標識符錯誤

他解釋了爲什麼「with」表達式失敗。

+0

不,這不是羅伯特所具有的問題 - 該部分討論了替換函數實現中的問題,但在上面的解析器中,並沒有第一個產生這種表達式的情況。 – 2010-01-26 19:52:39

+0

哎呀!在查看他使用的參考資料之前,我應該更清楚地閱讀他的代碼。 – Don 2010-01-26 20:06:30