.NET中是否有什么可以让我定义语法并生成编程语言的?


18

我有一门课程,教授要求我们为我们的最终项目创建DSL。他在Eclipse 的第一个xText课程中向我们介绍了。这是一门新课程,我对领域特定语言的含义还是有点模糊。

这是我目前的理解:领域特定语言是针对软件开发中的特定问题而创建的语言。DSL的示例是PHP,SQL,JavaScript,而相反的是Java,C#,C ++,Ruby等语言。

如果我错了,请随时纠正我。

我想知道的是:是否有用于.NET / Visual Studio的类似于Xtext的工具,该工具可以让我定义语法并可以使用活动图基于该工具生成编程语言?


6
PHP和Javascript并不是真正的DSL。DSL是一种解决特定问题领域的语言,例如医疗服务。SQL是DSL,因为它特定于使用关系数据集的问题域。有关更多信息,请参见en.wikipedia.org/wiki/Domain-specific_language
罗伯特·哈维

内默尔?
2012年

Answers:



10

您可以尝试使用ANTLR (或其他用于语言识别的工具)解析器生成器,该生成器可用于dotnet。在社区中,您可以找到sql,c#和许多其他语言的定义。

根据google的说法,也有ide支持:


更新:ANTLR4仅发出Java,而ANTLR3仍支持C#,但看不到任何重大更新。
Stefano Sanfilippo,2015年

3

您的第一个问题-什么是特定领域的语言...因为太大而无法在评论中显示。

领域特定语言是一种旨在在特定问题领域内工作的语言。例如,在虚幻引擎(用于第一人称射击游戏)中,存在一种称为UnrealScript的领域特定语言,该语言允许用户修改虚幻引擎的行为。该语言旨在解决一般问题,但仅限于其特定领域。Redcode(用于corewars)将是另一种特定于域的语言。上下文自由艺术中的语言特定于其领域。

想法是,使用特定领域的语言,可以创建一种DSL,以紧密地映射当前的问题。此时,即使使用添加的库来处理问题域,使用DLS进行编程也比使用通用语言进行编程要容易。


至于您的第二个问题-C#中的工具...我不了解C#,因此也不太了解这些工具。就是说,回到我上大学的编译器课程时,曾经使用过的两个工具(并且自此以后一直使用)是lex和yacc。在堆栈溢出结束... C#的Lex / Yacc?



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.