/interpret

Basic interpreter for a basic language. (totally invented :))

Primary LanguageCGNU General Public License v3.0GPL-3.0

interpret

Basic interpreter for EVAL language. (totally invented :))

USAGE

interpret < file

EVAL language

The language is executed line per line.

Loop

while(E) E end

Test

if(E) E end

Variable declaration + affectation

V = E

Function call

foo(E)

Comments

Starting by # eg: a = a+b # A comment

Grammar

E = expression F = function R = float o = operator V = variable

E --> if(E) E --> while(E) E --> end E --> (E) E --> F(E) E --> V=E E --> R E --> V E --> EoE

o --> [+ - / ^ * % > < <= >= == !=]{1} V --> [A-Za-z]+ F --> [A-Za-z]+ R --> [-+]{0,1}[0-9.]+

Operators
  • a = b -> true if a is egual b
  • a > b -> true if a greater than b
  • a < b -> true if a lower than b
  • a ~ b -> true if a not egual to b
  • a + b -> a add b
  • a - b -> a sub b
  • a * b -> a mul b
  • a % b -> a mod b
  • a / b -> a div b
  • a ^ b -> a power b
Operators priority
  • =, >, >, <, ~ ===> 1
  • +,- ===> 2
  • *,/,% ===> 3
  • ^ ===> 4

You can use the () for change the priority.

Predefined functions

print(E) ===> print the value of the expression abs(E) ===> calc the absolute value of the expression sqrt(E) ===> function sqrt cos(E) ===> function cos

EXAMPLES

You can read test.txt, it's a basic program written in EVAL. It print all prime numbers between 1 and 1000.

TODO

  • The ELSE structure : if(E) E else E end
  • Functions definitions : def:f(x) E end
  • Multi-parameters functions
  • Better errors management
  • Multi-chars operators
  • Multi-types (dynamic) : double, int, string, list
  • Very big numbers.