2

我从来没有写过 DSL,但我认为它是一个新项目的功能(假设的)。最终用户将能够用自然语言表达概念,例如除了当月的第一个星期一之外的 10 点到 11 点之间的工作日

荷兰用户可能会写weekdagen tussen 10 en 11 behalve op de eerste maandag van de maand。在这种情况下,单词的位置似乎匹配,但可能存在动词/名词等的位置在语言之间可能不同的表达式。

我意识到显而易见的答案(这取决于)。我是一名 .NET 开发人员,我考虑使用 Boo,但我愿意接受建议。我需要了解每个翻译是否需要重写实现的一部分(哪个部分),或者是否有办法进行实际翻译,也许在某种预处理器中。

4

2 回答 2

2

您不会找到能够翻译多种语言(比如一种或两种语言和英语)的翻译,尤其是考虑到英语本身至少可以有 3 种书写方式。

如果你想写一个DSL,你需要先想出生产规则(你写什么),然后把它变成一种用英语/荷兰语/火星语/等表达的方式。

例如:Schedule := Frame Inclusion [Exception]

这将是:

  • 框架:月、年、周、WeekDays、WeekEnds、月中的几天、假期等
  • 包含:介于、不在、周围、包含等
  • 例外:除了 [Schedule],但不是 [Schedule],除非 [Schedule]

然后,您可以担心词法分析器/解析器会纠正特定语法并将其放入该形式的产品中。

这些都在我的脑海中,甚至没有关闭,但应该足以开始。

于 2010-03-16T19:55:36.537 回答
1

使用特定领域语言工具创建的 DSL可以本地化。他们将所有字符串放入 .resx 文件中。

于 2010-03-16T19:59:13.120 回答