Parsing Vala方程解析

Parsing Vala方程解析,parsing,math,string-parsing,vala,Parsing,Math,String Parsing,Vala,我正试图学习一些有关Vala的知识,并想创建一个计算器来测试Gtk是如何工作的。问题是,我围绕着这样一个假设编写了所有代码,即有一种方法可以解析包含所需操作的字符串。大概是这样的: string operation = "5+2/3*4" stdout.printf(@"$(operation)") 我已经用Python实现了这一点,它与使用编译器解析器一样简单。我知道Python是面向数学的,但我想也许会有一个Vala库等着我作为答案。。。我没有发现它是否存在,但当我查看字符串文档时,我注

我正试图学习一些有关Vala的知识,并想创建一个计算器来测试Gtk是如何工作的。问题是,我围绕着这样一个假设编写了所有代码,即有一种方法可以解析包含所需操作的字符串。大概是这样的:

string operation = "5+2/3*4"
stdout.printf(@"$(operation)")
我已经用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)");
所以。。。我想也许有一种方法可以让它这样工作,也许是这样的:

string operation = "5+2/3*4"
stdout.printf(@"$(operation)")
我理解这不是一个准确的假设,因为它只是替换变量,需要进一步的步骤来实际评估它


现在我有两个主要的疑问:a)是否有一个库函数能够做到这一点?b)是否可以使用字符串模板来解决问题?

您可以使用
libvala
解析表达式(它是编译器的一部分)

在一个(或多个).Vala文件上运行Vala解析器

然后,您可以创建自己的
CodeVisitor
Decentant类,该类访问解析树的必要节点并计算表达式

据我所知,目前还没有表达式计算器能做到这一点。这是因为通常情况下,vala代码被转换为C代码,然后C编译器执行编译时表达式求值,或者完成的可执行文件执行运行时求值


Python是不同的,因为它主要是一种脚本语言,并且直接将评估构建到运行时/解释器中。我使用C++ LbMaTeVAL库,为此我首先需要一个VAUI文件将它绑定到Vala。我找到了。在名为的项目下有很多可用的vapi文件,它们在GNOME的Vala绑定列表中可以识别,尽管它们在安装时没有包含。

字符串模板方法在这里没有任何用处。您需要一个Vala不容易提供的完整表达式解析器。是用Vala编写的,如果这是一个有用的参考。我找到了一种方法,通过一个VAII文件绑定C++ MaSavar库,但是你能解释一下CODENTHORE文本和CODEMDEAL类吗?你想知道什么?请注意,stackoverflow不是一个讨论论坛。如果您有进一步的具体问题,您应该继续问一个新问题。如果您对编译器的工作方式感兴趣,我建议您学习vala源代码:Hacking vala页面上还有一些信息: