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

Way*_*ung 9 dsl f# oslo dsl-tools visual-studio

我在视觉工作室开发了一些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解析器,你怎么看?

Tec*_*ogy 7

我目前正在使用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


Bri*_*ian 6

我是嵌入式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都是各种选择.(我对其中任何一个都没有足够的经验来了解它们之间的权衡.)