diff options
| author | El-BG-1970 <elouan.gros.fr@gmail.com> | 2022-04-30 13:42:19 +0200 |
|---|---|---|
| committer | El-BG-1970 <elouan.gros.fr@gmail.com> | 2022-04-30 13:42:19 +0200 |
| commit | 6da4a2089e810ba4295d141917e8767a45e5bf72 (patch) | |
| tree | 629fd2bca1c225aeb4f2a02d5c266f02ddfcd60e /src/parser.rs | |
| parent | ba070578e48e1fab70075853638141502ba1615a (diff) | |
| download | rush-6da4a2089e810ba4295d141917e8767a45e5bf72.tar.gz | |
parser on single command seems to work
Diffstat (limited to 'src/parser.rs')
| -rw-r--r-- | src/parser.rs | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/parser.rs b/src/parser.rs index b95e619..b43d16e 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -1,14 +1,16 @@ use nom::{ IResult, character::complete::alphanumeric0, - character::complete::alphanumeric1, + //character::complete::alphanumeric1, character::complete::anychar, + character::complete::space1, + character::complete::space0, bytes::complete::tag, multi::many1, multi::many0, //branch::alt, //combinator::opt, - sequence::tuple + sequence::tuple, }; fn command(i: &str) -> IResult<&str, String> { @@ -21,29 +23,32 @@ fn command(i: &str) -> IResult<&str, String> { } } -fn parameter(i: &str) -> IResult<&str, &str> { - alphanumeric1(i) +fn parameter(i: &str) -> IResult<&str, String> { + match tuple((space1, many1(anychar)))(i) { + Ok((rest, (_,param))) => Ok((rest, param.iter().collect::<String>())), + Err(e) => Err(e) + } } fn ligature(i: &str) -> IResult<&str, Option<char>> { - match tag(";")(i) { + match tuple((space0, tag(";")))(i) { Ok((rest, c)) => - Ok((rest, c.chars().nth(0))), + Ok((rest, c.1.chars().nth(0))), Err(e) => Err(e) } } -fn command_line(i: &str) -> IResult<&str, Vec<String>> { +pub fn command_line(i: &str) -> IResult<&str, Vec<String>> { match tuple((command, many0(parameter)))(i) { Ok((rest, (com, params))) => { let mut cmd = vec!(com); - params.iter().for_each(|p| cmd.push(String::from(*p))); + params.iter().for_each(|p| cmd.push(p.to_string())); Ok((rest, cmd)) }, Err(e) => Err(e) } } -fn command_lines(i: &str) -> IResult<&str, Vec<(Vec<String>,Option<char>)>> { +pub fn command_lines(i: &str) -> IResult<&str, Vec<(Vec<String>,Option<char>)>> { many1(tuple((command_line, ligature)))(i) } |
