| Crates.io | evalit |
| lib.rs | evalit |
| version | 0.2.0-beta.0 |
| created_at | 2025-05-09 17:54:08.5635+00 |
| updated_at | 2025-06-01 10:36:05.902045+00 |
| description | a toy interpreter |
| homepage | https://github.com/zzzdong/evalit |
| repository | https://github.com/zzzdong/evalit |
| max_upload_size | |
| id | 1667427 |
| size | 532,094 |
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
$-2^{63}$ ~ $2^{63}$
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);
}