Select Git revision
-
Federico Lolli authoredFederico Lolli authored
syntax.rs 1.41 KiB
use std::ops::Range;
mod parser;
#[derive(Debug, Clone)]
struct Program(Vec<Lines>);
#[derive(Debug, Clone)]
pub enum Lines {
TimeDefinition(TimeRef),
Filler,
Generator(Generator),
Parameter(Parameter),
}
#[derive(Debug, Clone)]
struct Parameter {
span: Range<usize>,
name: String,
value: Expr,
}
#[derive(Debug, Clone)]
enum Expr {
Op(Box<Operation>),
Num(Number),
TimeVar(TimeVar),
Group(GroupExpr),
}
impl Expr {
fn span(&self) -> Range<usize> {
match self {
Expr::Op(op) => op.span.clone(),
Expr::Num(num) => num.span.clone(),
Expr::TimeVar(tv) => tv.span.clone(),
Expr::Group(expr) => expr.span.clone(),
}
}
}
#[derive(Debug, Clone)]
struct GroupExpr {
span: Range<usize>,
value: Box<Expr>,
}
#[derive(Debug, Clone)]
struct Operation {
span: Range<usize>,
op: Operator,
lhs: Box<Expr>,
rhs: Box<Expr>,
}
#[derive(Debug, Clone)]
enum Operator {
Add,
Sub,
Mul,
Div,
Pow,
}
#[derive(Debug, Clone)]
struct Number {
span: Range<usize>,
value: f64,
}
#[derive(Debug, Clone)]
struct Generator {
span: Range<usize>,
kind: GeneratorKind,
}
#[derive(Debug, Clone)]
enum GeneratorKind {
Parametric,
}
#[derive(Debug, Clone)]
struct TimeRef {
span: Range<usize>,
offset: f64,
}
#[derive(Debug, Clone)]
struct TimeVar {
span: Range<usize>,
}