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};