對於一個小型的夜間項目,我想編寫一個可用於.NET應用程序的驗證組件,以便對對象,輸入參數和發佈條件進行通常和繁瑣的驗證。如何通過C#定義一個DSL
我的第一個想法是將所有這個驗證設置邏輯轉儲到一個XML配置文件中,併爲想要在代碼中使用它的人員提供一個液體界面。
因爲我想提供一些實際可用的東西,我曾考慮過提供專門的DSL(域特定語言)。問題是我應該用什麼工具來做到這一點?
我想過使用正則表達式手動解析它。但是我個人希望能有更多......可用的東西。
那麼你會建議什麼?
對於一個小型的夜間項目,我想編寫一個可用於.NET應用程序的驗證組件,以便對對象,輸入參數和發佈條件進行通常和繁瑣的驗證。如何通過C#定義一個DSL
我的第一個想法是將所有這個驗證設置邏輯轉儲到一個XML配置文件中,併爲想要在代碼中使用它的人員提供一個液體界面。
因爲我想提供一些實際可用的東西,我曾考慮過提供專門的DSL(域特定語言)。問題是我應該用什麼工具來做到這一點?
我想過使用正則表達式手動解析它。但是我個人希望能有更多......可用的東西。
那麼你會建議什麼?
,看看在ANTLR項目。過去,我們在公司裏相當成功地使用了它。
聽起來好像你在談論實施one of .Net 4.0's features, code contracts。
所以我想如果你在一個DSL專門找我推薦的工具將是2010年VS.Net
DSl的事情是,他們很少孤立地有效。爲了能夠編寫真正的軟件,您需要能夠將DSL嵌入到主機語言中。例如,比較Linq的工作方式和直接的SQL。另一個很好的例子是VB中的XML文字特徵。兩者都允許您在通用PL中編寫實際代碼,並使用簡單的說明性DSL代碼進行編織。
結果比單獨的SQL或簡單的XML編輯器強大得多。
不幸的是,C#和VB都沒有提供任何元編程功能,所以唯一能做到這一點的方法就是構建自己的語言。如果這只是爲了好玩而做的事情,那麼您可能會修改單聲道C#編譯器,將您感興趣的功能添加到該語言中。另一種選擇可能是嘗試使用紅寶石。它有一個靈活的語法,讓你擺脫很多瘋狂。然而,個人而言,我更喜歡被黑客入侵的C#方法。
「既不C#也不提供任何元編程特性「啊,但這些並不是唯一的clr語言,請檢查boo或nemerle。 – anthony 2009-09-30 04:15:05
那麼,使用SQL或XSLT的人不是寫」真正的軟件「,他們的代碼」很少有效「? – 2010-04-08 19:19:09
這些語言大多數時間嵌入在另一種語言(Java,C#,VB,Ruby等)中,通常它們被嵌入爲API處理的字符串,這與離理想很遠Linq提供了比「純粹的ADO.NET」更有效的開發體驗,關鍵在於喜歡將DSL與主機進行深度集成,而不是隔離,問題不在於DSL,而在於隔離的DSL。 =好,隔離=壞 – 2010-04-09 00:08:14
可能要檢出Building Domain Specific Languages in Boo(Boo是一種CLR語言,概念應該繼承到C#)。一個示例項目是Simple State Machine。
爲什麼走這麼遠?開始使用泛型和流暢的界面。開始簡單,並通過一些生產工作。如果處理流暢接口的摩擦太高,那麼使用DSL來看看。
您可以嘗試用於Visual Studio的DSL工具。
你應該看看諷刺項目http://irony.codeplex.com/
看起來不錯。但是我需要一些可以成爲類庫的一部分。從我看到這需要java。但是好的 – Dejan 2009-09-17 04:30:17
啊,對不起。在這裏:http://www.antlr2.org/doc/csharp-runtime.html – 2009-09-17 13:53:20
不幸的是,我有一個未解決的錯誤與ANTLR C#庫,它無法使用生成的解析器:( – 2014-10-25 17:12:46