1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
//! Predicate DSL AST.
//!
//! Grammar (informal):
//!
//! ```text
//! expr := or
//! or := and ("||" and)*
//! and := cmp ("&&" cmp)*
//! cmp := sum (("<"|"<="|">"|">="|"=="|"!=") sum)?
//! sum := prod (("+"|"-") prod)*
//! prod := unary (("*"|"/") unary)*
//! unary := "-" unary | "!" unary | call
//! call := ident "(" args ")" | atom
//! atom := number | slot_ref | "(" expr ")"
//! slot_ref := "$" ident "." ident
//! args := expr ("," expr)*
//! ```
//!
//! Supported builtins: `min`, `max`, `abs`, `sum`, `len`, `dot`.
//! The scorer's output is the `f32` value of the top-level expression.
//! Boolean values are carried as f32 (0.0 / 1.0) to keep a single scalar
//! stack in the VM.
/// Expression node in the predicate DSL AST.
/// Binary operator.