有没有一些运行时做简单编译的库

il15
il15 09月02日 字数 337

可能题目不能表达我的意思(没有相关的知识),举个例子:

比如我在一个配置文件里面写了个表达式:

cond = (a>2)&&(b>3)

然后在程序运行时得到了

char *cond1 = "(a>2)&&(b>3)";

其中a和b都是程序里面的某些参数的名字,然后我想做这样的事情:

if (parse( cond1, callback_func_to_get_arg_value(), ... ) == 0) {...}

想问一下 有没有能完成 parse() 这个功能的库呢?

8 个回复
Madlee
无竹居士 09月02日
z16166
Netguy 09月02日

你这个不仅仅是parse吧,是eval,也就是要执行得到结果

随便弄一个脚本引擎都可以。

DraculaW
DraculaW 09月02日

你嵌入一个lua解析器到你的c程序里面呗

【 在 il15 的大作中提到: 】

: 可能题目不能表达我的意思(没有相关的知识),举个例子:

: 比如我在一个配置文件里面写了个表达式:

: cond = (a>2)&&(b>3)

: ...................

il15
il15 09月02日

好,多谢楼上的几位!我先学习一下lua。

【 在 DraculaW 的大作中提到: 】

: 你嵌入一个lua解析器到你的c程序里面呗

lele
乐乐 09月03日

可以用 shunting-yard 算法写个简单的 abstract syntax tree

有很多现成的开源库可以用,比如

https://github.com/cheng-zhao/libast

【 在 il15 的大作中提到: 】

: 可能题目不能表达我的意思(没有相关的知识),举个例子:

: 比如我在一个配置文件里面写了个表达式:

: cond = (a>2)&&(b>3)

: ...................

alextooter
来了 09月03日

libtcc试试

ylh1969
没谱 09月08日

有个老软件:yacc。百度一下。

【 在 il15 的大作中提到: 】

: 可能题目不能表达我的意思(没有相关的知识),举个例子:

: 比如我在一个配置文件里面写了个表达式:

: cond = (a>2)&&(b>3)

: ...................

il15
il15 09月09日

好,多谢。我本来也想拿dparser(类似bison)做一个的,但是不大熟,就直接拿c写了一个简单的。

本来以为很快能完成,结果还是花了近3天。

总之,多谢楼上的各位!

【 在 ylh1969 的大作中提到: 】

: 有个老软件:yacc。百度一下。