An implementation of S-FEEL using SLY (lex and yacc for Python3)
Project description
pySFeel
An implementation S-FEEL (Simple Expression Language) as specified in the DMN (Decision Model Notation) standard. pySFeel is implemented in Python, using the SLY module and has many FEEL features.
- not, and and or in logical expressions which can be enclosed in round brackets (())
- in() function, e.g. 5 in(<6)
- Lists and filters
- Contexts and filters
- Ranges
- Built in functions
- New DMN 1.3 built in functions - is(), and the range comparison functions
pySFeel processes a single S-FEEL statement at a time. It is not intended to be a syntactically perfect implementation of S-FEEL, but rather an enabler for an implementation of DMN (Decision Model Notation) pyDMNrules. The internal data types are float, string, boolean, datetime.date, datetime.time, and datetime.timedelta. The S-FEEL constant null is mapped to None. Years and months durations are stored as floats. Days and time durations are stored as datetime.timedelta
There is one deliberate deviation from the standard - the key word 'item' in a Context filters is not optional. [{x:1,y:2},{x:2,y:3}][x=1] is not valid (as x=1 is either True or False), but [{x:1,y:2},{x:2,y:3}][item x=1] is valid and will return {x:1,y:2}. Similarly, fred.y is not the 'y' filter on the List of Contexts named 'fred' (as fred.y is a valid name). However (fred).y is the 'y' filter on the list of Contexts named fred.
There's one extension - an assignment operator (<-)
fred <- 7
bill <- 9
fred = bill
This will return False
fred <- [{x:1,y:2},{x:2,y:3}]
(fred).y
This will return [2,3]
USAGE:
import pySFeel
parser = pySFeel.SFeelParser()
sfeelText = '7.3 in [2.0 .. 9.1]'
(status, retVal) = parser.sFeelParse(sfeelText)
if 'errors' in status:
print('With errors:', status['errors'])
- retVal will be True
- The dictonary 'status' will have the key 'errors' if you have errors in your sfeelText.
- status['errors'] is a list of strings. It may help in diagnosing your S-FEEL syntax errors.
Documentation: More details can be found at readthedocs
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pySFeel-1.3.7.tar.gz
.
File metadata
- Download URL: pySFeel-1.3.7.tar.gz
- Upload date:
- Size: 23.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 800d532a85c12c5b7259644610c548120e0dfced3859a37fb0c82adde846dd27 |
|
MD5 | 06060e9d03f050db2fe993bd8b01ade5 |
|
BLAKE2b-256 | bc3f7b1fce7bb96888dfdae4226a5fc8f177c35b86f3d21a9f07bc20649ee32d |
File details
Details for the file pySFeel-1.3.7-py3-none-any.whl
.
File metadata
- Download URL: pySFeel-1.3.7-py3-none-any.whl
- Upload date:
- Size: 23.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26bd2d0412cca574383c241049a14c05ab3e1b23d77de6f65a83e556eee78c66 |
|
MD5 | 91eed147f37629581a9f572ea85b9f7f |
|
BLAKE2b-256 | febc7b34228a461eb2fbfa8422314cda4d70a872bbd6b88d62feb982b65403b9 |