3.1.0 • Published 4 years ago

expreva v3.1.0

Weekly downloads
4
License
MIT
Repository
github
Last release
4 years ago

Expreva

Expreva is a language based on arithmetic and algebra expressions.

npm.io

Overview

This is a parser and interpreter for the Expreva language, written in TypeScript.

Expreva aims to be a modular, extensible language and cross-platform virtual machine.

It's an exploration to design a suitable medium for end-user programming, for example: in a spreadsheet formula; for data transport or query protocol; and creation of dynamic hypertext documents and interactive textbooks.

The source code is compiled to a compact JSON-serializable format, suitable for transfer over HTTP, WebSocket, or inter-process communication.

The goal is to stay beginner-friendly, and simple enough to implement on a range of platforms. Currently it runs in a web browser, Node.js server, and on PHP. An eventual plan is to compile to WebAssembly.

Parser

The grammar is based on infix notation, a superset of familiar arithmetics.

The parser produces a syntax tree of symbolic expressions in prefix notation, as in Lisp.

References

Interpreter

The interpreter is based on a study of make-a-lisp, with lexical scope, lambda, macro, conditions, and tail-call optimization.

Compiled expressions are evaluated in an isolated runtime environment. It allows passing values, objects, and functions, to and from the host. More work is needed to ensure safe evaluation, such as limiting the number of operations and time to live.

Develop

Install dependencies

yarn

Develop

Build, watch files and rebuild. This also starts a dev server with a test page.

yarn dev

Run tests and wait for press enter to rerun.

yarn test

This can be run in parallel with dev task above (in another terminal process) for test-driven development.

Type-check, watch files and rerun.

yarn type

Build and minify

yarn build
3.1.0

4 years ago

1.1.0

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.0

5 years ago