| Crates.io | novapoly-interpreter |
| lib.rs | novapoly-interpreter |
| version | 0.1.0 |
| created_at | 2025-11-29 17:22:45.896008+00 |
| updated_at | 2025-11-29 17:22:45.896008+00 |
| description | A Python-like code prediction language interpreter written in Rust |
| homepage | https://novapoly.org |
| repository | https://github.com/NovaPoly/novapoly-interpreter |
| max_upload_size | |
| id | 1957095 |
| size | 66,524 |
A Python-like language interpreter written in Rust. This library provides a complete interpreter for a Python-inspired language with support for variables, functions, control flow, data structures, and more.
print(), len(), range(), resolve_yes(), resolve_no()Add this to your Cargo.toml:
[dependencies]
novapoly-interpreter = { path = "." }
use novapoly_interpreter::execute;
fn main() {
let code = r#"
x = 10
y = 20
result = x + y
print(result)
"#;
match execute(code) {
Ok(value) => println!("Program executed successfully: {}", value),
Err(e) => eprintln!("Error: {}", e),
}
}
use novapoly_interpreter::execute;
fn main() {
let code = r#"
def factorial(n):
if n <= 1:
return 1
else:
return n * factorial(n - 1)
result = factorial(5)
print(result)
# Lists and loops
numbers = [1, 2, 3, 4, 5]
sum = 0
for num in numbers:
sum = sum + num
print(sum)
# Dictionaries
person = {"name": "Alice", "age": 30}
print(person["name"])
"#;
execute(code).unwrap();
}
x = 10
name = "Hello"
is_active = True
a = 10 + 5
b = 10 - 5
c = 10 * 5
d = 10 / 5
e = 10 % 3
f = 2 ** 3 # Power
if x > 10:
print("Large")
elif x > 5:
print("Medium")
else:
print("Small")
while x > 0:
print(x)
x = x - 1
for i in range(10):
print(i)
def greet(name):
return "Hello, " + name
message = greet("World")
print(message)
numbers = [1, 2, 3, 4, 5]
first = numbers[0]
numbers[0] = 10
person = {"name": "Alice", "age": 30}
name = person["name"]
person["city"] = "New York"
greeting = "Hello"
name = "World"
message = greeting + " " + name
repeated = "Hi" * 3 # "HiHiHi"
execute(code: &str) -> Result<Value, InterpreterError>Execute Python-like code and return the result.
InterpreterCreate a new interpreter instance for more control:
use novapoly_interpreter::{Interpreter, parse};
use novapoly_interpreter::lexer::tokenize;
let code = "x = 10";
let tokens = tokenize(code)?;
let ast = parse(&tokens)?;
let mut interpreter = Interpreter::new();
let result = interpreter.eval_program(&ast)?;
The interpreter provides detailed error messages:
LexerError: Issues during tokenizationParserError: Syntax errorsRuntimeError: Runtime execution errorsTypeError: Type mismatch errorsMIT OR Apache-2.0