可调试的域特定语言

时间:2012-11-28 09:49:39

标签: dsl

我的目标是为我的应用程序开发一个DSL,但我希望用户能够在他/她的DSL 中设置一个断点,而不会用户知道有关基础语言的任何信息。 DSL运行并且他/她看到的是与DSL相关的语法,堆栈,监视变量等。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

这取决于您的目标平台。例如,如果您在.NET之上实现DSL编译器,则使用调试信息(变量名,表达式和语句的源代码位置等)来注释字节码是微不足道的。

如果您还为您的语言提供Visual Studio扩展,您将能够重复使用免版税的MSVS Isolated Shell来编辑和调试DSL代码。

使用JVM几乎可以采用相同的方法(您可以使用Eclipse或Netbeans作为调试前端)。

本机代码生成有点复杂,但仍然可以做一些简单的事情,比如生成填充了line编译指示的C代码。

答案 1 :(得分:1)

你基本上需要为你的DSL生成代码,内置破解点的机会,每个断点都有内置的设施来观察内部状态变量。然后,您的调试器知道如何将DSL中的位置映射到调试断点,并且对于每个断点,只需调用观察者。 (如果观察者有名字,例如变量名,你可以让用户选择要拨打的名字。)