2009-09-16 69 views
2

對於一個小型的夜間項目,我想編寫一個可用於.NET應用程序的驗證組件,以便對對象,輸入參數和發佈條件進行通常和繁瑣的驗證。如何通過C#定義一個DSL

我的第一個想法是將所有這個驗證設置邏輯轉儲到一個XML配置文件中,併爲想要在代碼中使用它的人員提供一個液體界面。

因爲我想提供一些實際可用的東西,我曾考慮過提供專門的DSL(域特定語言)。問題是我應該用什麼工具來做到這一點?

我想過使用正則表達式手動解析它。但是我個人希望能有更多......可用的東西。

那麼你會建議什麼?

回答

1

,看看在ANTLR項目。過去,我們在公司裏相當成功地使用了它。

+0

看起來不錯。但是我需要一些可以成爲類庫的一部分。從我看到這需要java。但是好的 – Dejan 2009-09-17 04:30:17

+2

啊,對不起。在這裏:http://www.antlr2.org/doc/csharp-runtime.html – 2009-09-17 13:53:20

+0

不幸的是,我有一個未解決的錯誤與ANTLR C#庫,它無法使用生成的解析器:( – 2014-10-25 17:12:46

0

DSl的事情是,他們很少孤立地有效。爲了能夠編寫真正的軟件,您需要能夠將DSL嵌入到主機語言中。例如,比較Linq的工作方式和直接的SQL。另一個很好的例子是VB中的XML文字特徵。兩者都允許您在通用PL中編寫實際代碼,並使用簡單的說明性DSL代碼進行編織。

結果比單獨的SQL或簡單的XML編輯器強大得多。

不幸的是,C#和VB都沒有提供任何元編程功能,所以唯一能做到這一點的方法就是構建自己的語言。如果這只是爲了好玩而做的事情,那麼您可能會修改單聲道C#編譯器,將您感興趣的功能添加到該語言中。另一種選擇可能是嘗試使用紅寶石。它有一個靈活的語法,讓你擺脫很多瘋狂。然而,個人而言,我更喜歡被黑客入侵的C#方法。

+0

「既不C#也不提供任何元編程特性「啊,但這些並不是唯一的clr語言,請檢查boo或nemerle。 – anthony 2009-09-30 04:15:05

+0

那麼,使用SQL或XSLT的人不是寫」真正的軟件「,他們的代碼」很少有效「? – 2010-04-08 19:19:09

+0

這些語言大多數時間嵌入在另一種語言(Java,C#,VB,Ruby等)中,通常它們被嵌入爲API處理的字符串,這與離理想很遠Linq提供了比「純粹的ADO.NET」更有效的開發體驗,關鍵在於喜歡將DSL與主機進行深度集成,而不是隔離,問題不在於DSL,而在於隔離的DSL。 =好,隔離=壞 – 2010-04-09 00:08:14

0

看看來自微軟的Oslo,不知道它是否按照你的意思去做,但我知道你可以構建DSL解析器並指定語法,並讓它生成可以根據語法解析數據的類庫。在「M」語言

更多細節,以及如何使用它是here

0

爲什麼走這麼遠?開始使用泛型和流暢的界面。開始簡單,並通過一些生產工作。如果處理流暢接口的摩擦太高,那麼使用DSL來看看。

0

您可以嘗試用於Visual Studio的DSL工具。