VEE Script
Introduction
VEE Script is a scripting language supported on MICROEJ VEE.
Its syntax is a subset of JavaScript. This subset includes most expressions but excludes statements and blocks.
The strengths of VEE Script are its low footprint, its optimized performance, its customizable semantics and its ability to evaluate expressions depending on the runtime context.
To have the best runtime performance, expressions are preprocessed offboard. During this phase, expressions are parsed, converted into ASTs and serialized into a binary file. At runtime, the ASTs are deserialized from the binary file and the expressions can be evaluated efficiently.
VEE Script can be used for various use cases, including the design and rendering of dynamic GUIs and real-time information displays. For instance, VEE Script is currently used in the VEE Wear Kernel to design and render watchfaces.
Examples
For example, the following script could be used to display the heart rate:
product.evaluateTag('heart_rate') + ' BPM'
And the following script could be used to animate the position of a widget:
100 * product.applyFunction('sin', product.evaluateTag('current_time') / 1000 * 3.14)
Expression Types
VEE Script supports the following expression types:
literal
unary operation (+, -)
binary operation (*, /, %, +, -, <, >, <=, >=, ==, !=, &&, ||)
conditional (?:)
tag evaluation
function application
Value Types
Once an expression is evaluated, its value has one of the following types:
boolean
number
string
Language Syntax
The scripting language is a subset of JavaScript. Its syntax and semantics are specified by ECMAScript 5.1.
The following table summarizes the grammar rules of the language:
Grammar Rule |
Example |
Expression Type |
---|---|---|
<boolean> |
true |
Boolean literal |
<number> |
3.5 |
Number literal |
‘<string>’ |
‘hello world’ |
String literal |
<operator> <expression> |
-10 |
Unary operation |
<expression> <operator> <expression> |
1 + 2 |
Binary operation |
<expression> ? <expression> : <expression> |
2 > 1 ? 5 : 10 |
Conditional |
product.evaluateTag(‘<tag>’) |
product.evaluateTag(‘battery’) |
Tag evaluation |
product.applyFunction(‘<function>’, [expressions]) |
product.applyFunction(‘sqrt’, 9) |
Function application |
product.constants.<constant> |
product.constants.pi |
Literal |
Language Configuration
Since the semantics of the language depend on the product, the expression parser and interpreter must be configured.
The following information must be supplied to the parser:
the name and value of every constant
the name of every tag
the name of every function
The following information must be supplied to the interpreter:
the semantics of every tag
the semantics of every function
Evaluation
The VEE Script parser and interpreter are available on demand. You can contact MicroEJ Support to evaluate this solution.