问题标签 [dsl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
105003 浏览

c# - 如何将字符串转换为其等效的 LINQ 表达式树?

这是原始问题的简化版本。

我有一个名为 Person 的类:

...让我们说一个例子:

我想在我最喜欢的文本编辑器中将以下内容写成字符串......

我想获取这个字符串和我的对象实例并评估 TRUE 或 FALSE - 即在对象实例上评估 Func<Person, bool>。

以下是我目前的想法:

  1. 在 ANTLR 中实现基本语法以支持基本的比较和逻辑运算符。我正在考虑在此处复制 Visual Basic 优先级和一些功能集:http: //msdn.microsoft.com/en-us/library/fw84t893 (VS.80).aspx
  2. 让 ANTLR 从提供的字符串创建合适的 AST。
  3. 走 AST 并使用Predicate Builder框架动态创建 Func<Person, bool>
  4. 根据需要根据 Person 的实例评估谓词

我的问题是我完全烤过头了吗?有什么选择吗?


编辑:选择的解决方案

我决定使用动态 Linq 库,特别是 LINQSamples 中提供的动态查询类。

下面的代码:

结果是 System.Boolean 类型,在本例中为 TRUE。

非常感谢 Marc Gravell。

包括System.Linq.Dynamic nuget 包,此处的文档

0 投票
3 回答
399 浏览

ruby - 为 DSL 翻译块和语句

我想编写一个简单的 Ruby DSL 来将一些语句和表达式翻译成另一种语言。一个基本的例子是:

在这里, t 不是 ruby​​ 变量,因此块不能(也不能!)由 Ruby 评估。所以我最好的选择是使用解析输出(或 AST)自己进行翻译。为此,我可以使用 ParseTree 和 ruby​​2ruby。但是,我还有其他想要使用的构造,例如:

在这里,我有一个局部变量,我需要获取它的值才能进行翻译。但是,在执行块评估的函数中,我无权访问调用块的局部变量。如果它是一个全局变量 ($x),我可以检查它的名称是否存在于 global_variables 数组中,并且在最坏的情况下使用 eval,但是如果可能的话,我怎么能对局部变量这样做呢?

更新:

只是为了收拾东西。就像我最初说的那样,我使用 ruby​​2ruby(以及因此 ParseTree)来获取与块对应的 AST(使用 to_sexp)。但是在我的块中使用局部变量时,我遇到以下情况:

因此,我需要从变量的名称中获取变量的值作为字符串/符号。而且我不能使用 method_missing 或 instance_eval,因为我想将整个表达式翻译成另一种语言或语法(如 RPN)。

尽管如此,另一种不基于 ParseTree 的解决方案仍将受到欢迎,因为 Ruby 1.9 显然不完全支持它。

0 投票
5 回答
1947 浏览

.net - 在 .NET 中构建 DSL 的工具

我越来越喜欢开发 DSL。我使用 fslex 和 fsyacc 开发了一个带有 F# 的小程序,但错误消息不准确(我也找不到生成更好的方法,似乎没有关于如何处理错误案例的文档)以及事实他们不会充分解析 UNICODE 字符串对我来说是不可接受的。长话短说,我正在寻找可以让开发 DSL 变得非常简单的工具(Visual Studio 工具与我所追求的完全不同),我对解析/AST 生成部分最感兴趣。我看过 ANTLR 并且混合代码和语法定义元语言对我来说看起来很糟糕,所以请不要提及它或在答案中遇到类似问题的解决方案。还有,我在那里见过' s 一些名为 Boo 的语言的东西,但我现在真的对搞乱另一种语言(特别是如果它几乎没有支持的话)不感兴趣,所以这也不适合。任何其他建议都值得赞赏,只要它有良好的文档记录,可以在 .NET 中正常工作,最后但并非最不重要的是不涉及使用动态类型语言或使用 DLR。

0 投票
2 回答
218 浏览

java - 是否可以使用 JPA 持久化 DSL Java 对象?

我有一个 DSL Java 对象,即this在 setter 中返回的 POJO 加上 getter/setter 有一个不寻常的命名模式:

是否可以告诉 JPA 使用“name(String)”和“name()”作为 setter/getter 方法?

[编辑] 我的问题是created上面的字段。对于此字段,我希望 JPA 使用“getter” created(),因此该字段将始终为非 NULL。

或者有没有办法告诉 JPACURRENT TIMESTAMP在创建新对象时使用created == null

0 投票
5 回答
2925 浏览

.net - DSL框架的选择

我正在做一个需要我定义 DSL 的项目。由于提出正确的 DSL 对我的项目至关重要,因此我决定评估有助于定义 DSL、解析它和生成代码(必须使用基于 .NET 的语言)的现有框架我考虑的框架是:

  1. Boo 语言具有可定制的编译器和 python 语法,非常适合定义 DSL。
  2. 支持可扩展命令行开关的 Windows PowerShell。
  3. 支持可视化建模的 Microsoft DSL 工具,但灵活性较差(在我看来)
  4. ANTLR 是经过验证的工具
  5. C# 流利的接口。(对此不太满意)
  6. Oslo 框架(在生产中使用是否成熟?)

上面提到的每个框架都有优缺点,我无法做出决定。如果在上述框架之间进行选择,你会选择哪一个,为什么?

是否有任何其他框架如此基础以至于我可能错过了?

任何帮助或指导将不胜感激。

0 投票
4 回答
236 浏览

programming-languages - 我需要一个 DSL 来计算时间

有谁知道用于时间计算的 DSL,能够理解诸如“本月最后一个工作日之后的第二个工作日”之类的概念?

我不介意编写解析器,但我需要语言本身的帮助。

0 投票
6 回答
8181 浏览

ruby - Ruby DSL(领域特定语言)存储库,示例

我正在寻找 Ruby DSL(领域特定语言)的优秀示例。您知道哪些存储库、项目值得一读?为什么它(或:它们是)很好的例子?

我对经过深思熟虑和设计的更复杂的示例特别感兴趣。

0 投票
3 回答
958 浏览

c# - 是否有基于 .NET 的 CSS 抽象库?

我已经在一个非常大的项目上工作了将近 2 年,并且客户的要求不断变化。当然,这些变化会影响一切,我想找到一种以更动态的方式使用 CSS 的方法。

我假设我可以获得在 IronRuby/Python 下运行的 ruby​​ 或 python CSS DSL 之一,但是这个客户端对安装的软件/框架非常特别。

我还没有找到基本编程语言是 vb 或 c# 的 CSS DSL。

参考: http ://sandbox.pocoo.org/clevercss/和http://nubyonrails.com/articles/dynamic-css

0 投票
4 回答
1546 浏览

sql - 设计 SQL 替代方案?

我正在考虑设计和实现我自己的 SQL 等效 (DDL+DML),即...

  1. 纯关系代数语言,以及
  2. 具有优雅的类似于 Lisp-/Scheme 的语法

假设一个 RDBMS,如 MySQL,我究竟需要从哪里开始我的语言设计工作?在 InnoDB 等存储引擎层之上?

我不知道所有 RDBMS 功能通常位于存储引擎之上吗?我目前直观的理解是,创建 RDBMS(例如 MySQL)所需的大部分工作已经在存储引擎中完成(特别是在 InnoDB 中),您需要做的就是创建一个包装语言它。但我也知道,如果这是真的,为什么 MySQL 会存在!

0 投票
2 回答
322 浏览

ruby-on-rails - 如何开始使用 Ruby?如何使用 Ruby?它是什么著名的?DSL 将如何发挥作用?

有哪些很棒的学习资源?我用 Ruby 解决了什么样的问题?在 Rails 上学习 Ruby 和 Ruby 一样吗?如果我目前的背景是 Visual Studio 和 microsoft.net 框架,IronRuby 对我来说是最好的方式吗?

问题多多,求指教。