value_expr/lib.rs
1//! Value Expr
2//!
3//! ## DSL
4//!
5//! ```dsl
6//! Value:
7//! i32
8//! | Unary
9//! | Binary
10//! | Assign
11//! | Paren
12//! | FuncLike
13//! | Ident
14//! Unary:
15//! - Value
16//! | ! Value
17//! Binary:
18//! Value + Value
19//! | Value - Value
20//! | Value * Value
21//! | Value / Value
22//! | Value % Value
23//! | Value ^ Value
24//! | Value & Value
25//! | Value | Value
26//! | Value << Value
27//! | Value >> Value
28//! | Value == Value
29//! | Value != Value
30//! | Value > Value
31//! | Value < Value
32//! | Value >= Value
33//! | Value <= Value
34//! | Value && Value
35//! | Value || Value
36//! Assign:
37//! Ident = Value
38//! | Ident += Value
39//! | Ident -= Value
40//! | Ident *= Value
41//! | Ident /= Value
42//! | Ident %= Value
43//! | Ident ^= Value
44//! | Ident &= Value
45//! | Ident |= Value
46//! | Ident <<= Value
47//! | Ident >>= Value
48//! Paren:
49//! ( Values )
50//! FuncLike:
51//! Ident ( Values )
52//! Values:
53//! <nothing>
54//! | ValuesNext
55//! ValuesNext:
56//! Value
57//! | Value , ValuesNext
58//! Ident:
59//! <the rust lang ident>
60//! ```
61//!
62//! ## Binary
63//!
64//! 运算优先级从低到高如下,同一优先级时按照顺序左结合运算。
65//!
66//! 在混合使用时,大于0的值被认为是true,否则为false,true对应的数值为1,false为0。
67//!
68//! ```x
69//! 逻辑或 ||
70//! 逻辑与 &&
71//! 数值比较 == != > < >= <=
72//! 按位或 |
73//! 按位异或 ^
74//! 按位与 &
75//! 移位 << >>
76//! 数值运算 +-
77//! 数值运算 */%
78//! ```
79//!
80//! ## FuncLike
81//!
82//! 类函数,与普通函数不同的是,它允许延迟计算。命名上,建议所有含延迟的函数均以_开头,普通函数以英文字母开头。
83//!
84
85mod context;
86mod data;
87mod parser;
88mod valuer;
89
90pub use context::{ContextHelper, ContextHolder};
91pub use data::{AssignOp, BinOp, UnOp, Value};
92pub use valuer::{Context, Valued};