用于DSL的嵌入式脚本引擎

问题描述 投票:3回答:8

我正在一个需要嵌入式DSL来满足其预期要求的项目。

DSL将基于用户定义的事件。这是所需语法的模型:

user-defined-event-1 {
    // event body
}

user-defined-event-2 {
    // event body
}

可能基于事件,我知道的最相似的语言是LSL (from Second Life)

因此,在阅读了关于SO的其他类似问题之后,我想问一问C ++(我在Qt工作)上最好的可嵌入脚本引擎(Ruby,Lua,Python等),它允许我创建此DSL。

在我的项目中,我将测试脚本是否正确使用了DSL语法(至少定义了一个事件),并为用户提供了底层脚本引擎的全部功能,并在可能的情况下为用户提供了Qt。

不是嵌入式语言与Qt一起使用的要求。它可以隔离,但也可以进行一些集成也很好。

c++ qt dsl embedded-language
8个回答
3
投票

那里有at least a few Qt-Lua bindings。 Lua可以执行您上面显示的语法;具体来说,Qt表示Lua中的表(关联数组),如果仅将匿名表传递给函数,则不需要括号:

{}

Lua是否实际上是您应用程序的best,当然取决于您的应用程序。无论哪种方式,Lua都非常容易(IMO)嵌入到C或C ++中。


1
投票

您可以通过用C ++编写的Google V8项目来查看可嵌入的javascript。

Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio > function LengthOfTable(t) print(#t) end > LengthOfTable ({"a","b","c"}) 3 > LengthOfTable {"a","b","c"} 3


1
投票

Qt随http://code.google.com/apis/v8/intro.html脚本模块一起提供。它使用基于ECMAScript的语言(例如javascript)。


1
投票

Tcl非常接近您建议的语法:

QtScript

proc定义一个过程,多余的{}大括号用于参数。在tcl shell中,可以逐行动态键入过程,复制和粘贴过程,或从文件中加载过程。也可以通过简单地重新加载它们来重新定义它们。


0
投票

我从未尝试过,但是有proc user-defined-event-1 {} { # event body puts "Hello World" }


0
投票

我相信boost :: python很容易实现。我听说也有一些python-Qt解决方案。


0
投票

您似乎对选择通用DSL有非常具体的要求。您可能要尝试使用通用DSL库(例如PyQt),而不是使用预先嵌入的语言。


0
投票

要在应用程序中嵌入DSL,我建议Boost.Proto。多年来,我一直在使用ANTLR,最近一次使用的是ANTLR。您可能想尝试具有C ++运行时的版本4。由于与关键字emit发生冲突,第3版在Qt上存在问题。

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