slj 0.6.6

Programski jezik v slovenščini | A programming language in Slovenian
Documentation
use std::rc::Rc;
use super::drevo::VozliščeOption::{*, self};
use crate::parser::{Vozlišče::{*, self}, Tip};

pub fn prireditveni_op(op: &str) -> VozliščeOption {
    match op {
        "+="  => Aritmetični(Seštevanje),
        "-="  => Aritmetični(Odštevanje),
        "*="  => Aritmetični(Množenje),
        "/="  => Aritmetični(Deljenje),
        "%="  => Aritmetični(Modulo),
        "**=" => Aritmetični(Potenca),
        "||=" => Logični(Disjunkcija),
        "&&=" => Logični(Konjunkcija),
        "<<=" => Bitni(BitniPremikLevo),
        ">>=" => Bitni(BitniPremikDesno),
        "|="  => Bitni(BitniAli),
        "^="  => Bitni(BitniXor),
        "&="  => Bitni(BitniIn),
        _     => Brez,
    }
}

pub const PRIMERJALNI_OP: [&str; 6] = ["==", "!=", ">", ">=", "<", "<="];
pub fn primerjalni_op(op: &str) -> Option<fn(Tip, Rc<Vozlišče>, Rc<Vozlišče>) -> Vozlišče> {
    match op {
        "==" => Some(Enako),
        "!=" => Some(NiEnako),
        ">"  => Some(Večje),
        ">=" => Some(VečjeEnako),
        "<"  => Some(Manjše),
        "<=" => Some(ManjšeEnako),
        _    => None,
    }
}

pub fn aritmetični_op(op: &str) -> fn(Tip, Rc<Vozlišče>, Rc<Vozlišče>) -> Vozlišče {
    match op {
        "+"  => Seštevanje,
        "-"  => Odštevanje,
        "*"  => Množenje,
        "/"  => Deljenje,
        "%"  => Modulo,
        "**" => Potenca,
        _    => unreachable!()
    }
}

pub fn bitni_op(op: &str) -> fn(Rc<Vozlišče>, Rc<Vozlišče>) -> Vozlišče {
    match op {
        "|"  => BitniAli,
        "^"  => BitniXor,
        "&"  => BitniIn,
        "<<"  => BitniPremikLevo,
        ">>"  => BitniPremikDesno,
        _    => unreachable!()
    }
}