A simple embeddable scripting language.

Matthias Ladkau ecfaf8048d feat: Adding initial parts for debug support 3 vuotta sitten
cli ecfaf8048d feat: Adding initial parts for debug support 3 vuotta sitten
config 840f1e1958 feat: Adding logging and sink support 3 vuotta sitten
ecal-support ecfaf8048d feat: Adding initial parts for debug support 3 vuotta sitten
engine cb65914e8e fix: Fix race condition for thread pool with one thread - fix race condition for error reporting 3 vuotta sitten
examples ecfaf8048d feat: Adding initial parts for debug support 3 vuotta sitten
interpreter ecfaf8048d feat: Adding initial parts for debug support 3 vuotta sitten
parser 155035339d fix: lexer to properly support forward slashes in comments 3 vuotta sitten
scope 623daf105d feat: Adding doc function and test fixup 3 vuotta sitten
stdlib b9a925e614 feat: Adding cron trigger function 3 vuotta sitten
util 8a578b4595 feat: Loading of initial file 3 vuotta sitten
.gitignore ecfaf8048d feat: Adding initial parts for debug support 3 vuotta sitten
LICENSE 7ae4036818 feat: Adding initial skeleton 3 vuotta sitten
Makefile 7975b738af feat: CLI support 3 vuotta sitten
NOTICE 7ae4036818 feat: Adding initial skeleton 3 vuotta sitten
README.md 82d27f1fb3 doc: Adding getting started 3 vuotta sitten
debug.md ecfaf8048d feat: Adding initial parts for debug support 3 vuotta sitten
ecal.md ecfaf8048d feat: Adding initial parts for debug support 3 vuotta sitten
engine.md 840f1e1958 feat: Adding logging and sink support 3 vuotta sitten
go.mod 9370f1dd73 feat: Adding help function 3 vuotta sitten
go.sum 9370f1dd73 feat: Adding help function 3 vuotta sitten

README.md

ECAL

ECAL is an ECA (Event Condition Action) language for concurrent event processing. ECAL can define event-based systems using rules which are triggered by events. ECAL is intended to be embedded into other software to provide an easy to use scripting language which can react to external events.

Features

  • Simple intuitive syntax
  • Minimalistic base language
  • Language can be easily extended either by auto generating bridge adapters to Go functions or by adding custom function into the stdlib
  • External events can be easily pushed into the interpreter and scripts written in ECAL can react to the events.
  • Simple but powerful concurrent event-based processing supporting priorities and scoping for control flow.
  • Handling event rules can match on event state and rules can suppress each other.

Getting started

Clone the repository and build the ECAL executable with a simple make command. You need Go 1.14 or higher.

Run ./ecal to start an interactive session. You can now write simple one line statements and evaluate them:

>>>a:=2;b:=a*4;a+b
10
>>>"Result is {{a+b}}"
Result is 10

Close the interpreter by pressing +d and change into the directory examples/fib. There are 2 ECAL files in here:

lib.ecal

# Library for fib

/*
fib calculates the fibonacci series using recursion.
*/
func fib(n) {
    if (n <= 1) {
        return n
    }
    return fib(n-1) + fib(n-2)
}

fib.ecal

import "lib.ecal" as lib

for a in range(2, 20, 2) {
  log("fib({{a}}) = ", lib.fib(a))
}

Run the ECAL program with: sh run.sh. The output should be like:

$ sh run.sh
2000/01/01 12:12:01 fib(2) = 1
2000/01/01 12:12:01 fib(4) = 3
2000/01/01 12:12:01 fib(6) = 8
2000/01/01 12:12:01 fib(8) = 21
2000/01/01 12:12:01 fib(10) = 55
2000/01/01 12:12:01 fib(12) = 144
2000/01/01 12:12:02 fib(14) = 377
2000/01/01 12:12:02 fib(16) = 987
2000/01/01 12:12:02 fib(18) = 2584
2000/01/01 12:12:02 fib(20) = 6765

Further Reading:

License

ECAL source code is available under the MIT License.