使用Microsoft Visual Studio进行文本域特定语言(DSL)开发

我在视觉工作室开发了一些DSL。最初,我发现VS2010有一个可视化和建模SDK。它有一个名为DSL工具的工具。但它似乎只适用于图形DSL开发。 然后我看到一些帖子说“奥斯陆”是用于开发文本DSL的工具,“这是”微软的产品 - 微软不再支持该工具。 http://blogs.msdn.com/b/modelcitizen/archive/2010/09/22/update-on-sql-server-modeling-ctp-repository-modeling-services-quot-quadrant-quot-and-quot- M-quot.aspx 因此,我想知道我是否想开发一个文本DSL,哪种工具最好?如果我使用F#powerpack和FSLex和FSYacc实现DSL解析器,你怎么看?     
已邀请:
我目前正在使用FsLex / FsYacc开发几种基于文本的外部DSL。我正在使用手动解析器,但我发现FsLex / FsYacc在设计阶段更容易维护。 FsLex / FsYacc不如ANTLR复杂,但由于大多数DSL都相当简单,因此FsLex / FsYacc是在Visual Studio中使用的完美选择。保持DSL简单是一件好事,因为它们旨在受到限制并且易于学习。 我发现Martin Fowler的书是一个很好的资源,不像示例和细节那样,而不是作为DSL思想的百科全书。他对DSL的可用性和其他设计方面的讨论也值得一读。正如Toumas所说,它不包括F#或函数语言。福勒先生写道,他缺乏这些科目的经验,无法及时将这本书推向市场。 赞扬了FsLex / FsYacc,我仍然希望有人能为F#编写一个好的ANTLR后端。 :) -Neil     
我是嵌入式DSL的粉丝 http://lorgonblog.wordpress.com/2010/04/15/using-vs2010-to-edit-f-source-code-and-a-little-logo-edsl/ http://lorgonblog.wordpress.com/2010/04/16/fun-with-turtle-graphics-in-f/ 你只需要使用杠杆F#语法和一些好的函数名称以及可能的其他语法聪明(列表,工作流,......)来获得“看起来可能是另一种语言”但实际上只是F#的代码。 但是,对于外部DSL,您只需要一个语法/解析器/等工具链,而FsLex / FsYacc,或者ANTLR或FParsec都是各种选择。 (我对其中任何一个都没有足够的经验来了解它们之间的权衡。)     
自从我早些时候发表文章以来,我还购买并阅读了部分Terence Parr的书“语言实现模式”。它非常出色,虽然比Martin Fowler的书更具技术性(有一些额外的材料可能是“龙书”) “为了新的千年”。这些示例主要基于Java和ANTLR,但文本是主要内容,因此无论一个人的语言开发环境如何,本书都很有用。 有趣的是,这两本书之间几乎没有重叠。 Martin Fowler的书很好地介绍了基本DSL的设计和实现,例如用于规范和配置的那些,而Terence Parr的书更具技术性,涵盖了通过更复杂的语言和字节码扩展的领域。机器。如果你可以为它们预算,我建议两者,否则,它们在给定的域内是一个很好的选择。     
Martin Fowler有一本关于DSL的新书。遗憾的是,它不会讨论微软的工具或功能语言。 微软不再支持图形工具“Quadrant”,但MGrammar仍然支持并集成到SQL服务器,对吧? MGrammar是“DSL制作语言”。 不过,我会说功能语言(阅读:F#)是要走的路。 这本书有一个简单的例子,说明如何用F#制作DSL:http://www.manning.com/petricek/ 谷歌也找到了很多关于这个主题的好的参考资料。     
尝试MBase,但如果您的DSL足够复杂,需要高效的编译器和PEG语法,那么它只值得使用。否则FsYacc绰绰有余。     
我们的DMS软件再造工具包旨在处理任意DSL(我恰好是架构师)。 大多数人认为如果你有一个足够的解析器,并且它在技术上是正确的,就像你有晶体管一样,你可以构建一台计算机。 根据我的经验,您需要的不仅仅是解析器:您需要构建符号表的方法,以便您的生成器知道特定标识符的含义是什么,分析规范的方法,轻松编码转换的方法以及应用优化生成结果。 DMS提供了支持构建DSL的所有这些功能。从这个意义上讲,它远远超出了F#。     

要回复问题请先登录注册