特定领域语言/功能的工具

问题描述 投票:0回答:1

我们的用户可以输入学生可以回答的问题。我们的用户需要一种可扩展的灵活方式来定义这些问题的正确答案(以简单字符串形式存储)。

我想公开一个领域特定功能的库,用户可以调用该库来描述正确的答案。例如:

exact_match("puppy") // means the correct answer is the string 'puppy'

contains("yesterday") // means any answer with the word 'yesterday' is correct

天真的实现将涉及在沙盒运行时中评估用户提供的字符串(例如javascript vm或ruby vm)。但我想走得更远,只允许调用特定的函数。任何其他脚本都将被丢弃。这样:

puts("foo"); contains("yesterday")

将是非法的。由于我们不公开或允许puts()

如何限制执行环境仅运行功能白名单?还是有一种不同的方法来构建这种面向外部的DSL,而不是尝试将现有的语言限制为功能的子集?

dsl
1个回答
0
投票

如果您是我,我将由JetBrains签出MPS,它是一个开源的DSL创建工具。我从未亲自使用过它,但是从我看到的所有内容来看,它非常直观;并且所有其他产品的功能都非常强大。

© www.soinside.com 2019 - 2024. All rights reserved.