Skip to content
Snippets Groups Projects
Select Git revision
  • arpist-upd
  • flight-radar-api
  • replay-segs
  • v0.4
  • rovie-202410
  • main default protected
  • python-tools
  • rocket-mavlink
  • tdl-implementation
  • tgen-lang
  • mavlink
  • v0.3.0
  • v0.2.0
13 results

syntax.rs

Blame
  • 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>,
    }