# The Text Expression Language This is a crate contains a parser, execution engine and specification for a super simple language to write readable and memorizable text processing expressions. This document should be used as specification for language to clarify the development of this package. ## Data Types This Language holds only two data types; strings and integers. Both are used as literals in arguments of attribute statements. ### str A `str` must use double quotes. So `"foo"` and `"!=$)(j0j0802"` are both valid strings. If a double quote occurs inside the string, it can be escaped using `\`. So strings with escaped double quotes look like this: `"\"Quoted Text\""`. This is actually all there is to strings. They cant contain any other escaped chars (such as new lines etc.) ### int An `ìnt` is either a single `0` or `1-9` followed by `0-9` as often as wanted. There are no signed integers. ## Queries Queries indicate the format of a string which gets tested against it. Currently there are 9 Attributes which are specified: | Attribute | Resolve to true if the tested string | |------------------|------------------------------------------------| | `starts ` | starts with the given string | | `ends ` | ends with the given string | | `contains ` | contains a substring equal to the given string | | `equals ` | exactly equals the given string | | `length ` | has the given length | | `numeric` | contains only numeric chars | | `alpha` | contains only alphabetic chars | | `alphanumeric` | contains only alphanumeric chars | | `special` | contains only special chars | ## Logical Operators Currently there are only two binary logical operations: `and` and `or` | Operator | Precedence | Associativity | |----------|------------|---------------| | `and` | 2 | Right | | `or` | 1 | Right | ### Examples `1 or 2` parses as `(1 or 2)` `1 and 2` parses as `(1 and 2)` `1 and 2 or 3` parses as `((1 and 2) or 3)` `1 or 2 and 3` parses as `(1 or (2 and 3))` `1 and 2 and 3` parses as `(1 and (2 and 3))` `1 or 2 or 3` parses as `(1 or (2 or 3))` `1 or 2 or 3 and 4 or 5` parses as `(1 or (2 or ((3 and 4) or 5)))))` ## Groups > Currently not implemented. May come in future versions to enable more complex text processing;