{"id":26878876,"url":"https://github.com/logicify/sel","last_synced_at":"2026-01-08T08:15:12.736Z","repository":{"id":27289115,"uuid":"30762720","full_name":"Logicify/sel","owner":"Logicify","description":"Simple and lightweight expression language","archived":false,"fork":false,"pushed_at":"2016-07-12T12:21:20.000Z","size":4,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-04-15T03:17:54.717Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Logicify.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-02-13T15:40:06.000Z","updated_at":"2017-02-23T16:14:17.000Z","dependencies_parsed_at":"2022-07-24T14:46:55.057Z","dependency_job_id":null,"html_url":"https://github.com/Logicify/sel","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Logicify%2Fsel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Logicify%2Fsel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Logicify%2Fsel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Logicify%2Fsel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Logicify","download_url":"https://codeload.github.com/Logicify/sel/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246468677,"owners_count":20782547,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-31T12:30:08.166Z","updated_at":"2026-01-08T08:15:12.693Z","avatar_url":"https://github.com/Logicify.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# SEL\nSEL - is a simple and lightweight expression language which can be used in your application for extending configuration abilities.\n\n# Examples\n\nSimple interpolation\n\n```\nHello, $username.\n```\n\nInvoke function\n\n```\nUppercased value of test is $upper(test)\n```\n\nInvoke function with variable argument\n\n```\nUppercased username is $upper($username)\n```\n\nLogical operations (conjunction)\n\n```\n$allOf(true, false, false)\n```\n\nMore complex logical operations\n\n```\n$anyOf($not($myVar), $myVar)\n```\n\n## Key Features\n* Simple syntax make it possible to keep lexer very light and quick.\n* Easy extensible via custom handlers\n* Default library contains handlers for logical operations.\n* Evaluation result could be non-serializable value.\n\n## Syntax\n\nThe only entity which can be interpreted is a \"Function\". Function invocation is an alphanumeric sequence followed by \"$\" sign. Optionally it could have 1 argument which should be wrapped in brackets.\nHere is invocation of function called ```upper``` with value ```some str``` passed as argument:\n\n```\n$upper(some str)\n```\n\nAnother example is invocation of the function without arguments.\n\n```\n$myFunc\n```\n\n## Evaluator\n\nEach function should be registered in context. All language capabilities are based on this concept.\nSEL evaluator comes with default function library which provides logical operations and some utilities.\n\nIf function invocation is the root of the syntax tree the result of evaluation of the top level function will become a result of evaluation of whole expression.\nFor example:\n\n```\n$allOf(true, false) -\u003e FALSE\n```\nResult should be of type Boolean\n\nHowever for expression which contains string in ther root of the syntax tree result will be a string:\n```\nValue is: $allOf(true, false) -\u003e \"Value is: False\"\n```\n\nCredits\n-------\n* Dmitry Berezovsky, Logicify (\u003chttp://logicify.com/\u003e)\n* Alex Beskrovny, Logicify (\u003chttp://logicify.com/\u003e)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogicify%2Fsel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flogicify%2Fsel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogicify%2Fsel/lists"}