schala/src/language.rs

28 lines
628 B
Rust
Raw Normal View History

2017-01-21 14:34:17 -08:00
use std::fmt::Debug;
2017-01-21 01:49:45 -08:00
pub struct TokenError {
pub msg: String,
}
2017-01-23 19:45:26 -08:00
impl TokenError {
pub fn new(msg: &str) -> TokenError {
TokenError { msg: msg.to_string() }
}
}
2017-01-21 01:49:45 -08:00
pub struct ParseError {
pub msg: String,
}
2017-01-23 19:11:50 -08:00
pub struct LLVMCodeString(pub String);
pub trait ProgrammingLanguage<Evaluator> {
2017-01-21 14:34:17 -08:00
type Token: Debug;
type AST: Debug;
2017-01-21 01:49:45 -08:00
fn tokenize(input: &str) -> Result<Vec<Self::Token>, TokenError>;
fn parse(input: Vec<Self::Token>) -> Result<Self::AST, ParseError>;
2017-01-23 01:32:57 -08:00
fn evaluate(ast: Self::AST, evaluator: &mut Evaluator) -> Vec<String>;
2017-01-23 19:11:50 -08:00
fn compile(ast: Self::AST) -> LLVMCodeString;
2017-01-21 01:49:45 -08:00
}