表达式解析器
表达式解析器,支持数学运算、字符串操作、控制结构和变量等功能。它可以解析复杂表达式。
基本数学运算:加减乘除、取模等
比较和逻辑运算:>, <, >=, <=, ==, !=, &&, ||, !
控制结构:if-else 条件语句、for 循环
字符串操作:连接、重复、子串、查找替换等
数学函数:sin, cos, tan, sqrt, log, exp, abs, pow 等
字符串函数:length, substr, toupper, tolower, replace, find 等
变量支持:变量赋值和使用
错误处理:详细的错误定位和消息
表达式验证:预验证表达式语法
运算符:描述,示例
+:加法/连接,示例: 2 + 3 → 5 h或者 "a" + "b" → "ab"
-:减法,示例: 5 - 2 → 3
*:乘法/重复,示例: 2 * 3 → 6 或者 "a" * 3 → "aaa"
/:除法,示例: 6 / 2 → 3
%:取模,示例: 5 % 2 → 1
():括号,示例: (2 + 3) * 4 → 20<
运算符:描述,示例
>:大于,示例: 5 > 3 → 1 (true)
<:小于,示例: 5 < 3 → 0 (false)
>=:大于等,示例: 5 >= 5 → 1
<=:小于等于,示例: 5 <= 3 → 0
==:等,示例: 5 == 5 → 1
!=:不等于,示例: 5 != 5 → 0
&&:逻辑与,示例: 1 && 0 → 0
||:逻辑,示例: 1 || 0 → 1
!:逻辑,示例: !1 → 0
if (条件) { 表达式 } else if (条件) { 表达式 } else { 表达式 }
语法结构:
支持任意数量的 else if 分支
else 分支是可选的
每个条件表达式必须用括号括起来
每个分支的代码块可以是任意合法表达式
执行逻辑:
按顺序检查每个条件
执行第一个为真的条件对应的代码块
如果没有条件为真且存在 else 分支,则执行 else 分支
如果没有条件为真且没有 else 分支,返回 0
使用建议:
对于复杂条件逻辑,建议使用 else if 而不是嵌套 if 语句
可以配合变量使用实现复杂业务逻辑
注意条件表达式的短路求值特性
示例:
if (x > 5) { "大于" } else if (x < 5) { "小于" } else { "等于" }
if (1 > 2) { "A" } else if (2 > 3) { "B" } else { "C" }, 结果:"C"
x=5; if (x>10) { "A" } else if (x>8) { "B" } else if (x>3) { "C" } else { "D" }, 结果:"C"
if (0) { "A" } else if (1) { "B" } else if (1) { "C" } else { "D" }, 结果:"B"
if (0) { "A" } else if (0) { "B" } else if (1) { "C" } else { "D" }, 结果:"C"
if (0) { "A" } else if (0) { "B" } else if (0) { "C" } else { "D" }, 结果:"D"
for (初始化; 条件; 增量) { 表达式 }
示例:
for (i=0; i<3; i=i+1) { i } // 返回最后一次迭代的值(2)
变量名 = 表达式
示例:
x = 5; y = x * 2; y // 返回10
用双引号括起来:"Hello World"
支持 Unicode 字符:"中文测试"
支持转义序列:\n, \t, \r, \", \\, \uXXXX(Unicode 转义)
函数名(参数1, 参数2, ...)
函数:描述,示例:
sin(x):正弦函数,示例: sin(0) → 0
cos(x):余弦函数,示例: cos(0) → 1
tan(x):正切函数,示例: tan(0) → 0
sqrt(x):平方根,示例: sqrt(4) → 2
log(x):自然对数,示例: log(1) → 0
exp(x):指数函数,示例: exp(0) → 1
abs(x):绝对值,示例: abs(-5) → 5
floor(x):向下取整,示例: floor(3.7) → 3
ceil(x):向上取整,示例: ceil(3.2) → 4
round(x):四舍五入,示例: round(3.5) → 4
pow(x,y):幂运算,示例: pow(2,3) → 8
函数:描述
length(s):字符串长度,示例: length("abc") → 3
substr(s, start):从start开始的子串,示例: substr("abcde", 2) → "cde"
substr(s, start, len):从start开始长度为len的子串,示例: substr("abcde", 1, 2) → "bc"
toupper(s):转换为大写,示例: toupper("abc") → "ABC"
tolower(s):转换为小写,示例: tolower("ABC") → "abc"
trim(s):去除两端空白,示例: trim(" abc ") → "abc"
replace(s,old,new):替换子串,示例: replace("aabb","aa","cc") → "ccbb"
find(s, sub):查找子串位置,示例: find("abc","b") → 1
字符串比较是按字典序进行的
所有数值都以双精度浮点数处理
变量名只能包含字母、数字和下划线
表达式中的空格会被忽略(字符串内容中的空格除外)
Unicode 转义序列格式为 \uXXXX,其中 XXXX 是4位十六进制数