我們目前使用ILOG BRMS for .NET來允許業務用戶在我們的系統中創建邏輯而無需知道如何編程。此規則由業務用戶創建(即:它是系統的一部分,而不是規範的一部分):.NET自然語言編程/別名/(域特定語言)框架
definitions
set 'the letter event' to the scheduled DelinquentLetterEvent on the invoice;
set 'final notice possibility1' to the bill date of the invoice + 36 days;
set 'final notice possibility2' to the time of 'the letter event' + 7 days;
set 'final notice result' to the most future date from these values {
'final notice possibility1', 'final notice possibility2' };
then
in the event that 'final notice result' is not a mailing date,
change it to the next available mailing date;
add a new FinalNoticeEvent scheduled for 'final notice result' to the invoice;
系統執行在.net(這裏顯示僞C#)的等價物:
//variable declarations
ScheduledEvent theLetterEvent = theInvoice.GetScheduledEvent(
KnownEventType.DelinquentLetterEvent);
DateTime noticePossibility1 = theInvoice.BillDate.AddDays(36);
DateTime noticePossibility2 = theLetterEvent.Time.AddDays(7);
DateTime[] possibilities = new DateTime[]()
{ noticePossibility1, noticePossibility2 };
DateTime noticeResult = CustomClass.Max(possibilities);
//actions
CustomClass2.MakeNextMailingDate(ref noticeResult);
theInvoice.AddScheduledEvent(KnownEventType.FinalNoticeEvent, noticeResult);
程序員在設計時指定每個類/方法/屬性使用了哪些文本。例如,去年法文本爲:
add a new {0} scheduled for {1} to {this}
它逐漸清晰的在我身上,我並不需要一個BRMS的。規則與斷言實例匹配的概念對於商業用戶來說與程序員同樣是陌生的。我們的業務用戶對SQL腳本有些熟悉(有些熟悉VBA),所以他們對順序執行很熟悉。
我真正想要的是一種在設計時指定文本(DSL)的方法,它映射到自然語言編程的類/方法/屬性,最好在BRMS之外。
這樣的事情是否存在?這個概念的名字是什麼?
迴應:
我們認爲腳本語言廣泛地滿足這一需求。具體而言,他們不提供文本替換/映射到我尋求的.NET代碼。 我想寫一個c#方法,然後聲明一些可以用來調用它的合理短語。
ANTLR - 感謝您的提示。這是一個通用的解析器。如果我想自己實現這一點,我肯定會需要解析器。
您發明的任何人造語言都是以問題領域爲中心的詞彙,根據定義爲「特定領域的語言」。
我覺得這個說法和我可以回答我的問題一樣好。謝謝。
如果您需要完全一般的計算,您最終將得到一個典型的計算機語言。如果你可以縮小範圍,你可能會以一些有用的東西結束。
我可以一直縮小範圍到調用我實現的方法,但問題在於當我添加更多方法時,我想爲這些新方法附加更多詞彙表。
無論我們是否繼續使用ILOG或其他語言作爲該語言的支持基礎結構,DSL都會發展。