我正在尝试学习一些关于Vala的内容,并希望创建一个计算器来测试Gtk的工作方式。问题是我在假设周围编写了一些方法来解析包含所需操作的字符串。像这样:
string operation = "5+2/3*4"
我用Python完成了这个,它就像使用编译器解析器一样简单。我理解Python是面向数学的,但我想也许会有Vala库等着我作为答案......如果确实存在,我还没有找到它,但是当我看着字符串文档时,我注意到这一部分:
/* Strings prefixed with '@' are string templates. They can evaluate
* embedded variables and expressions prefixed with '$'.
* Since Vala 0.7.8.
*/
string name = "Dave";
println (@"Good morning, $name!");
println (@"4 + 3 = $(4 + 3)");
所以......我想也许有办法让它以这种方式运作,也许就是这样:
stdout.printf(@"$(operation)")
我理解这不是一个准确的假设,因为它只会替换变量并需要进一步的步骤来实际评估它。
现在我遇到的两个主要疑问是:a)是否有能够执行此操作的库函数?和b)是否可以使用字符串模板计算解决方案?
答案 0 :(得分:2)
这是我发现可以完成工作的东西。我使用了C ++ libmatheval库,为此我首先需要一个vapi文件将它绑定到Vala。我找到了here。在名为vala-extra-apis的项目下有很多可用的vapi文件,它们在GNOME的Vala List of Bindings中被识别,尽管它们不包含在安装中。
答案 1 :(得分:0)
您可以使用libvala
(编译器的一部分)解析表达式。
compiler creates a CodeContext
并在一个(或几个).vala文件上运行Vala解析器。
然后,您可以创建自己的CodeVisitor
后代类,该类访问解析树的必要节点并评估表达式。
据我所知,还没有表达式评估器可以做到这一点。这是因为通常将vala代码转换为C代码,然后C编译器执行编译时表达式评估,或者完成的可执行文件执行运行时评估。
Python是不同的,因为它主要是一种脚本语言,并且直接在运行时/解释器中构建了评估。