问题标签 [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 投票
2 回答
7891 浏览

exception - StructureMap 异常代码:202 未定义默认实例

当我在 SM 中注册以下内容然后尝试创建一个实例时,我得到了异常 - 'StructureMap 异常代码:202 没有为 PluginFamily 定义默认实例......'

当我尝试获取 IRepository 的实例时发生异常。

有谁知道我错过了什么?

干杯

奥利

0 投票
1 回答
372 浏览

visual-studio - 如何修复 DSL 工具上模糊的图标装饰器?

我遇到了这个问题,经过广泛的研究,我发现了它的根本原因和一种对其他人有用的解决方法。

图标装饰器变得“模糊”,因为它在形状上的定位以及从像素到英寸的转换。

通常域特定语言的绘图表面具有 96dpi 的分辨率,并且图标装饰器使用 0.06 英寸的偏移量定位。将其转换为像素,它在绘图表面中变为 5.76 像素的偏移量。由于无法在屏幕上绘制“半像素”,GDI+ 会调整图像以尝试模拟“半像素”定位。这就是图像变得模糊的原因。

作为解决方法,我的建议是使用 Icon 装饰器类的 Horizo​​ntal Offset 和 Vertical Offset 属性来修复“半像素”装饰器的位置。如果您使用“0.0025”英寸作为垂直和水平偏移量,当图像定位从英寸转换为像素时,它将变为 6 像素,而不是 5.76。发生这种情况是因为现在的偏移量是默认值 0.06 英寸加上您设置的偏移量 0.0025 = 0.0625。

我还发现使用具有透明度的 png 图像会导致图像模糊,即使使用我在此处建议的偏移解决方法也是如此。将图像转换为位图格式可以解决问题。

如果有人对解决问题也有任何建议,请添加您的解决方案或解决方法。

0 投票
0 回答
83 浏览

properties - 属性扩展语言 (DSL) - 是否存在?

这是我的问题:我们有 N 个应用程序在 M 个不同的环境(qa/prod/etc.)中运行,每个环境有 P 个服务器。相乘,独特配置的数量达到数百个。这些应用程序中的每一个都有一组特定于环境的属性(公共主机名、侦听端口、最大内存等)。

相乘,有数千个属性需要设置。但是,定义属性应该是什么的实际规则要简单得多。例如,在每个物理服务器有两个应用实例的生产环境中,一个应用绑定到端口 8080,另一个绑定到 8081。

这就是我想要的:一种语言 (DSL),我可以使用它指定规定属性设置应该是什么的规则。我想避免重复自己。语言应该是声明性的。我们非常以 Java 为中心,但我需要做的就是生成名称/值对,所以我不想限制自己。

这样的事情存在吗?我什么也没找到。

我想我可以使用 Drools 或其他规则引擎,但这对于这个目的来说非常繁重。属性文件是最小的公分母。我们可以将它们放入 war/ear 文件中,在构建过程中使用它们进行基于模板的替换,等等。当然有更优雅的方法来解决这种性质的问题,但我们有点坚持我们的架构,至少在短期。

0 投票
3 回答
820 浏览

python - Haskell 相当于 Python 的“构造”

Construct是用 Python 实现的 DSL,用于描述数据结构(二进制和文本)。一旦你有了描述的数据结构,construct 就可以为你解析和构建它。哪个好(“DRY”、“Declarative”、“Denotational-Semantics”...)

使用示例:

我需要这样的 Haskell 工具,我想知道这样的东西是否存在。

我知道:

  • Data.Binary:用户分别实现解析和构建
  • Parsec:仅用于解析?只为文字?

我想必须使用 Template Haskell 来实现这一点?

0 投票
5 回答
3016 浏览

delphi - Delphi的解析器生成器?

谁能推荐一个可以生成win32 Delphi代码的解析器生成器?我想要做的是创建一个简单的领域特定语言。

0 投票
1 回答
140 浏览

wix - 解决 DSL SetUp 项目的问题

我正在与 DSL 设置项目中的 InstallerDefinition.dslsetup 文件作斗争。我收到以下错误:

运行转换:安装项目无法从环境中检索项目“PsiTraffic.Modeling.PomModel.Dsl”的输出路径。确保该项目存在于解决方案中。仅支持 Visual C# 和 Visual Basic 项目类型。

项目“PsiTraffic.Modeling.PomModel.Dsl”在解决方案中,它也是设置解决方案的项目参考。该项目是 C#,所以它给我的唯一两个指针是无用的。

这是它在 dslsetup 文件中引用的部分:

如果我提供文件的完整路径,错误就会消失,但这违背了项目属性的全部要点,并且我稍后会从 supportAssembly 属性中得到错误。

这方面的好例子并不多,它的 Visual Studio 也没有为您提供诊断问题的很多支持。

任何见解或好的例子将不胜感激。

0 投票
2 回答
485 浏览

dsl - DSL 将根元素添加到序列化

我正在寻求帮助以实现以下目标

该图代表一辆汽车,用户可以添加引擎和颜色

当我查看 XML 时,它看起来像这样:

我想做的是将汽车包裹在“车辆”内,即

我不确定实现这一目标的最佳方法。我希望将模型浏览器和生成的 XML 包装在“车辆”中,但对于所有其他意图和目的,用户仅使用汽车

信息:Visual Studio 2010、C# 和 DSL SDK for 2010

0 投票
3 回答
669 浏览

scala - Scala 和 Jython 中的中缀运算符

我正在评估面向计算的应用程序的语言,该应用程序需要一种面向最终用户的简单嵌入式脚本语言。我一直在考虑使用 Scala 作为主要的底层语言,使用 Jython 作为脚本接口。Scala 的一个吸引力在于我可以定义诸如:*矩阵对象的元素乘法之类的方法,并将其与中缀语法一起使用a :* b。但是 :* 在 Python 中不是有效的方法名称。Jython 如何处理这个问题?

由于它的灵活性,我会考虑使用 Scala 作为脚本语言。但即使使用类型推断,所有和必需的val类型var定义对于习惯于像 matlab 这样的动态语言的外行用户来说还是太多了。相比之下,Boo 的 option-ducky选项可能会起作用,但我想留在 JVM 而不是 .NET 上。我认为 Scala 没有-ducky

更一般地,考虑以下 DSL(来自http://www.cs.utah.edu/~hal/HBC/)来模拟潜在狄利克雷分配:

对于熟悉分层贝叶斯建模的用户来说,这种语法非常棒(例如与 PyMCMC 相比)。JVM 上是否有任何语言可以很容易地定义这样的语法,并且可以访问像 python 这样的基本脚本语言?

想法赞赏。

0 投票
1 回答
370 浏览

python - 扩展 Jython 语法

我想向 Jython 添加语法,以便为用户启用更好的 API。例如,像 NumPy 这样的矩阵库将受益于矩阵和元素操作,比如 Matlab 的:*vs.*中缀运算符。

您可以使用以下方法在 Octave 中创建矩阵:

这比 NumPy 的要好得多:

R使用公式“y ~ x + z”在矩阵/数据框中选择变量。这比替代["y"] ["x","z"]或解析字符串“y ~ x + y”要好得多。

可以使用Easy Extend在 Cython 中实现更复杂的示例。但是 EasyExtend 在 JVM 上不起作用。

向 Jython 添加语法的最简单但相当稳健的方法是什么?如果有一个框架来实现全新的语言结构或在 jython 中定义迷你语言,那就太好了。

0 投票
1 回答
1211 浏览

c# - 使用 IronPython 简化为 C# 应用程序编写的 DSL

感谢上一个问题的建议,我正忙于尝试 IronPython、IronRuby 和 Boo 来为我的 C# 应用程序创建 DSL。第一步是 IronPython,因为它拥有更大的用户和知识库。如果我能在这里得到一些很好的工作,我可以停下来。

这是我的问题:

我希望我的 IronPython 脚本能够访问名为 Lib 的类中的函数。现在我可以将程序集添加到 IronPython 运行时并通过在我创建的范围内执行语句来导入类:

如果我想运行 Lib::PrintHello,它只是一个 hello world 风格的语句,我的 Python 脚本包含:

或(如果它不是静态的):

如何更改我的环境,以便我可以在 Python 脚本中使用基本语句,如下所示:

我希望这些脚本对于非程序员来说很简单。我不希望他们知道什么是类或它是如何工作的。IronPython 确实就在那里,因此一些基本操作(如 for、do、if 和基本函数定义)不需要我为我的 DSL 编写编译器。