A toy interpreter.
use evalit::{Interpreter, Evaluator};
fn main() {
let mut env = Environment::new();
let script = r#"
fn fib(n) {
if n <= 0 {
return 0;
}
if n <= 2 {
return 1;
}
return fib(n-1) + fib(n-2);
}
let sum = 0;
for i in 0..=10 {
sum += fib(i);
}
return sum;
"#;
let retval = Interpreter::eval_script(script, env).unwrap();
println!("ret: {:?}", ret);
// should output:
// ret: Some(143)
}
true, false
float number, f64.
string quote by "
variable name is a string, start with _ or letter, and can contain letter, number, _.
let a;
let a = 1;1 + 2 * 3;| operator | description |
|---|---|
+ |
add |
- |
subtract |
* |
multiply |
/ |
divide |
% |
remainder |
== |
equal |
!= |
not equal |
< |
less than |
<= |
less than or equal |
> |
greater than |
>= |
greater than or equal |
&& |
and |
|| |
or |
! |
not |
= |
assign |
+= |
add assign |
-= |
subtract assign |
*= |
multiply assign |
/= |
divide assign |
%= |
remainder assign |
[] |
index |
. |
member |
() |
call |
.. |
range |
loop to repeat.
loop {}while to conditional repeat.
while condition {}for to iterate.
for i in 0..=10 {}if to choose branch.
if condition {} else {}break to exist loop.
continue to finish one iterate.
return to return value.
fn fib(n) {
if n <= 0 {
return 0;
}
if n <= 2 {
return 1;
}
return fib(n-1) + fib(n-2);
}