vrsh 0.1.0

A simple shell written for my own learning.
use crate::shell::common::types::{InitialCmd, InitialCmdPart, InitialCmdOrComment};

grammar;

match {
    "$(" => CALCULATION_BEGINNING,
    ")" => CALCULATION_END,
    r#"[^$()#']+"# => TEXT,
    r#"#[^#\n\r]*[\n\r]*"# => COMMENT, // '#' comment
    r#"'[^']*'"# => SINGLE_QUOTE_STRING,
}

pub InitialCmdOrComment: InitialCmdOrComment = {
    <cmd: InitialCmd> => InitialCmdOrComment::InitialCmd(cmd),
    COMMENT => InitialCmdOrComment::Comment,
}

InitialCmd: InitialCmd = {
    <parts: InitialCmdPart+> => InitialCmd {
        parts,
    },
}

InitialCmdPart: InitialCmdPart = {
    <str: SINGLE_QUOTE_STRING> => InitialCmdPart::SingleQuotedString(String::from(str)),
    CALCULATION_BEGINNING <cmd: InitialCmd> CALCULATION_END => InitialCmdPart::Calculation(cmd),
    <text: TEXT> => InitialCmdPart::String(String::from(text)),
}