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)),
}