valkyrie-antlr 0.0.1

The hand write parser of valkyrie language
Documentation
use super::*;

impl<'i> Extractor<ESuffixContext<'i>> for PostfixNode {
    fn take_one(node: &ESuffixContext<'i>) -> Option<Self> {
        let prefix = OperatorNode::take(node.op_suffix())?;
        let base = ExpressionType::take(node.expression())?;
        let span = Range { start: node.start().start as u32, end: node.stop().stop as u32 };
        Some(Self { operator: prefix, base, span })
    }
}
impl<'i> Extractor<EPrefixContext<'i>> for PrefixNode {
    fn take_one(node: &EPrefixContext<'i>) -> Option<Self> {
        let prefix = OperatorNode::take(node.op_prefix())?;
        let base = ExpressionType::take(node.expression())?;
        let span = Range { start: node.start().start as u32, end: node.stop().stop as u32 };
        Some(Self { operator: prefix, base, span })
    }
}

impl<'i> Extractor<Op_prefixContextAll<'i>> for OperatorNode {
    fn take_one(node: &Op_prefixContextAll<'i>) -> Option<Self> {
        let text = node.get_text();
        let span = Range { start: node.start().start as u32, end: node.stop().stop as u32 };
        let kind = match text.as_str() {
            "+" => ValkyrieOperator::Positive,
            "-" => ValkyrieOperator::Negative,
            "&" => ValkyrieOperator::Box,
            "*" => ValkyrieOperator::Unbox,
            "" => ValkyrieOperator::Reciprocal,
            "" => ValkyrieOperator::Roots(2),
            "" => ValkyrieOperator::Roots(3),
            "" => ValkyrieOperator::Roots(4),
            _ => unreachable!("Missing prefix {:?}", text),
        };
        Some(Self { kind, span })
    }
}
impl<'i> Extractor<Op_suffixContextAll<'i>> for OperatorNode {
    fn take_one(node: &Op_suffixContextAll<'i>) -> Option<Self> {
        let text = node.get_text();
        let span = Range { start: node.start().start as u32, end: node.stop().stop as u32 };
        let kind = match text.as_str() {
            "" => ValkyrieOperator::Celsius,
            "" => ValkyrieOperator::Fahrenheit,
            "%" => ValkyrieOperator::DivideByDecimalPower(2),
            "" => ValkyrieOperator::DivideByDecimalPower(3),
            "" => ValkyrieOperator::DivideByDecimalPower(4),
            _ => unreachable!("Missing suffix {:?}", text),
        };
        Some(Self { kind, span })
    }
}