description on https://github.com/Robotics-DAI-FMFI-UK/spike-automata-firmware/blob/master/program_format_specification_in_ABNF.txt

__procedures__:
print_message(string msg)
print_value(string msg, number n)
matrix_clear()
matric_orientation(number o)
matrix_set_pixel(number row, number col, number brightness_percentage)
matrix_set_image(number image_id)
matrix_letter(string msg)
matrix_digit(number digit)
play_tone(number freq, number dur_ms)
stop_play()
set_local_number(number var, number value)
set_local_string(number var, string value)
set_local_boolean(number var, boolean value)
set_global_number(number var, number value)
set_global_string(number var, string value)
set_global_boolean(number var, boolean value)
motor_on(number port_var, number speed)
motor_on_for(number port_var, number speed, number time_ms)
motor_turn(number port_var, number speed, number angle_deg)
motor_off(number port_var)
base_speed(number port_var, number speed)
base_fwd(number port_var, number dist_deg)
base_on(number port_var)
base_off(number port_var)
base_turn(number port_var, number radius, number angle)
base_tank(number port_var, number left_speed, number right_speed)
base_tank_for(number port_var, number left_speed, number right_speed, number time_ms)
base_tank_turn(number port_var, number left_speed, number right_speed, number angle_deg)
delay(ms)
while(number boolean_var)
wend()
if(number boolean_var)
else()
endif()
lock()
unlock()

__functions__:
read()
read_line()
angle(number dir)
motor_angle(number port_var)
motor_speed(number port_var)
left_button()
right_button()
bt_button()
distance(number port_var)
force(number port_var)
color(number port_var)
reflect(number port_var)
ambient(number port_var)
concat(string s1, string s2)
substr(string s, number i, number len)
eqstr(string s1, string s2)
setchar(string s, string c, number i)
ascii(string s)
chr(number ascii)
eq(number a, number b)
less(number a, number b)
more(number a, number b)
between(number x, number bottom, number top)
plus(number a, number b)
minus(number a, number b)
times(number a, number b)
divide(number a, number b)
mod(number a, number b)
sqrt(number x)
abs(number x)
sgn(number x)
sin(number x)
cos(number x)
atan2(number y, number x)
ceil(number x)
floor(number x)
and(boolean a, boolean b)
or(boolean a, boolean b)
xor(boolean a, boolean b)
not(boolean x)                                                