本文介绍开源C语言库Melon的表达式组件,该组件实现了一个轻量级表达式,允许开发者定制化属于自己的专属变量和函数解析器。该模块可以用于文本模板内容替换以及一些简单的指令模式编程场景。
下面是该组件支持的语法:
abc --这是一个变量
"abc" --这是一个字符串常量
'abc' --这也是字符串常量
1 --整数
1.2 --浮点数
0xa --十六进制整数
0311 --八进制整数
concat(abc, bcd) --这是一个函数,参数有两个,都是变量
concat(abc, "bcd") --这是一个函数,参数有两个,一个是变量,一个是常量
concat(1, "bcd") --两个参数都是常量
concat("abc", concat(bcd, "efg")) --这个例子展示了函数嵌套调用
concat("abc", concat(bcd, "efg")) aaa concat("bcd", concat(efg, "hij")) --这个例子展示运行多个表达式
简单来说,表达式语法支持三种类型内容:
- 常量
- 变量
- 函数
并且函数支持嵌套调用。
此外,可以一次执行多个表达式,所有表达式的执行结果为最后一个表达式的结果。
我们分别对着三种类型分别说明:
常量
这个比较好理解,就是字面量,主要支持:字符串、整数和浮点数。其中,整数支持十进制写法、八进制写法和十六进制写法。
变量
变量顾名思义,就是其值可变。但由于表达式比较简单,且应用场景与常规编程语言不同,因此不是通过=
来进行赋值的,而是通过回调函数,由使用者决定该返回何值作为该变量的值。
函数
与变量一样,函数的行为完全由回调函数决定,也就是说由使用者自行定制。
例子
我们看一个示例
#include "mln_expr.h"
#include "mln_log.h"
#include <stdio.h>
static mln_expr_val_t *func_expr_handler