aboutsummaryrefslogtreecommitdiff
path: root/rprt-engine/src/expression.rs
diff options
context:
space:
mode:
authortslil <tslil@posteo.de>2025-10-18 18:12:46 +0100
committertslil <tslil@posteo.de>2025-10-18 20:14:52 +0100
commit02c7b10c407982ca117098bd64358a8bb910bd3a (patch)
treec96cb3265cd58e63dd31a539052c9842ca37b01d /rprt-engine/src/expression.rs
parent9a845a610aaf42aaba301d7b0ce1c88096d36915 (diff)
Some basic train and parenthesis parsing, things are beginning to become exciting
Diffstat (limited to 'rprt-engine/src/expression.rs')
-rw-r--r--rprt-engine/src/expression.rs72
1 files changed, 29 insertions, 43 deletions
diff --git a/rprt-engine/src/expression.rs b/rprt-engine/src/expression.rs
index 68849cb..1ee898e 100644
--- a/rprt-engine/src/expression.rs
+++ b/rprt-engine/src/expression.rs
@@ -1,55 +1,32 @@
#[derive(Debug, Clone, PartialEq)]
-pub enum SelectionValuedExpr {
- // Nullary selection function application
- NullaryApplicationS(SelectionFn),
- NullaryApplicationT(TextFn),
-
- // Monadic selection function application: α F
- MonadicApplicationS {
- arg: Box<SelectionValuedExpr>,
- func: SelectionFn,
- },
- // Monadic selection function application: F τ
- MonadicApplicationT {
- arg: Box<TextValuedExpr>,
- func: TextFn,
- },
-
- // Dyadic selection function application: α F β
- DyadicApplicationS {
- left: Box<SelectionValuedExpr>,
- right: Box<SelectionValuedExpr>,
- func: SelectionFn,
- },
- // Dyadic text function application: α F τ
- DyadicApplicationT {
- left: Box<SelectionValuedExpr>,
- right: Box<SelectionValuedExpr>,
- func: SelectionFn,
- },
-}
-
-#[derive(Debug, Clone, PartialEq)]
-pub enum TextValuedExpr {
- // Selection coerced to text (implicit coercion)
- FromSelection(Box<SelectionValuedExpr>),
-}
-
-#[derive(Debug, Clone, PartialEq)]
-pub enum SelectionFn {
- Function {
+pub enum Composite {
+ SelectionFunction {
func: BuiltinSelectionFn,
search_mod: Option<SearchModifier>,
result_transform: Option<ResultTransform>,
},
+ TextFunction {
+ func: BuiltinTextFn,
+ swapped: bool,
+ },
+
Hook {
kind: HookKind,
- left: Box<SelectionFn>,
- right: Box<SelectionFn>,
+ left: Box<Composite>,
+ right: Box<Composite>,
},
- Train(Vec<SelectionFn>),
+ Train2 {
+ f: Box<Composite>,
+ g: Box<Composite>,
+ },
+
+ Train3 {
+ f: Box<Composite>,
+ g: Box<Composite>,
+ h: Box<Composite>,
+ },
}
#[derive(Debug, Clone, PartialEq)]
@@ -65,7 +42,16 @@ pub enum TextFn {
right: Box<TextFn>,
},
- Train(Vec<TextFn>),
+ Train2 {
+ f: Box<TextFn>,
+ g: Box<TextFn>,
+ },
+
+ Train3 {
+ f: Box<TextFn>,
+ g: Box<TextFn>,
+ h: Box<TextFn>,
+ },
}
#[derive(Debug, Clone, PartialEq)]