2009-08-19 43 views
0

我正在創建一個新的域特定語言。你如何測試一種語言,或者你可以用語言來做什麼(變換,編譯,檢查)。 什麼是學習最佳實踐的好參考或起點?什麼是測試域特定語言的好參考?

+0

如果英語不是您的第一語言,我很抱歉,但這個問題沒有意義。 – 2009-08-19 07:27:01

+0

更好的標題:「測試編譯器corectness」 – 2009-10-23 16:17:29

回答

0

這可能與您試圖提問的內容完全無關,但PHP自帶測試腳本,以便任何人都可以測試基本語言功能(變量,如果語句,循環等)是否正常工作。

0

傳統方法是使用您正在實施的語言引導您的實現。這樣你就可以獲得一個「免費」的大型測試套件(當然是相對的),而且你有強大的動力來解決問題並進行優化。

1

你可以建立編程語言測試,第一種方式:

  1. 創建正在創建
  2. 斷言腳本通過調查其副作用語言的腳本。你可以通過例如用主語言(機器語言)創建以新語言執行腳本的單元測試。

如果您想了解有關如何創建編程語言的更多信息,請參閱「最終ANTLR參考」一書,這是一個很好的起點。

一個非常有用的模式來測試一種新的語言的語法如下:

  1. 解釋一個腳本,並建立一個AST
  2. 從AST生成新的語言代碼
  3. 生成一個從所生成的代碼
  4. 斷言,這兩個AST結構相同

有時它更AST方便地斷言來自兩個AST的生成代碼是相同的。

建立你的測試,如你建立你的語言:

  1. 詞彙
  2. 句法
  3. 語義
+0

感謝您的建議,並感謝指向ANTLR。 – 2009-08-19 18:40:42

1

我想劫持其他項目的工作單元測試。例如,如果我知道boost單元測試正在工作,那麼我可以在XYZ新的編譯時操作之後重新運行測試,並確保它們仍然通過。我不確定其他語言有什麼可用,但IMO for C++,boost是最終的編譯器壓力測試。

對於一個新的語言,我會使其受到我的標準評估程序:

  • 解決在新的語言項目歐拉問題。
  • 構建一個單元測試套件,用於解決針對這些問題編寫的解決方案,並確保編譯的代碼仍然返回正確的答案。

它遠非完美,但它會迫使您構建各種各樣的算法/策略,結果是一個緊湊的驗證測試。如果您在語言規範中進行了更改,則更新解決方案以適應它們並不難。

+0

感謝您的提示。我正在研究一種新的,特定領域的語言,因此沒有確定的編譯器壓力測試。我將不得不創建一個。 還要感謝Project Euler的指針。 – 2009-08-19 18:50:07

+0

沒問題。 PE也會給你非常好的想法,語言擅長表達什麼算法,以及不擅長的語言。 – 2009-08-19 18:58:33

0

研究的第一件事是unit testing,因爲這是開發者應該從一開始就應該做的事情。事實上,有些人甚至主張在編寫任何實際代碼之前編寫單元測試。

對於大多數流行的語言,如Java,Python等,有很多單元測試框架。 This blog post給出了Javascript的單元測試框架的完整列表。

下一步是瞭解有關lint程序,該程序檢查代碼庫中的不正確或不清楚的構造。這通常不包含在構建過​​程中,但是它是測試的重要部分。有C,Javascript和Python等lint程序。