Make string and bool parsing complete
This commit is contained in:
parent
39656a3801
commit
7960c3270e
2 changed files with 10 additions and 5 deletions
|
@ -160,8 +160,8 @@ where
|
|||
named!(int(&str) -> Literal, map!(flat_map!(digit1, parse_to!(u64)), Literal::Int));
|
||||
|
||||
named!(bool_(&str) -> Literal, alt!(
|
||||
tag!("true") => { |_| Literal::Bool(true) } |
|
||||
tag!("false") => { |_| Literal::Bool(false) }
|
||||
complete!(tag!("true")) => { |_| Literal::Bool(true) } |
|
||||
complete!(tag!("false")) => { |_| Literal::Bool(false) }
|
||||
));
|
||||
|
||||
fn string_internal(i: &str) -> nom::IResult<&str, Cow<'_, str>, nom::error::Error<&str>> {
|
||||
|
@ -172,7 +172,7 @@ fn string_internal(i: &str) -> nom::IResult<&str, Cow<'_, str>, nom::error::Erro
|
|||
}
|
||||
|
||||
named!(string(&str) -> Literal, preceded!(
|
||||
char!('"'),
|
||||
complete!(char!('"')),
|
||||
map!(
|
||||
string_internal,
|
||||
|s| Literal::String(s)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use nom::character::complete::{multispace0, multispace1};
|
||||
use nom::error::{ErrorKind, ParseError};
|
||||
use nom::{alt, char, complete, do_parse, many0, named, separated_list0, tag};
|
||||
use nom::{alt, char, complete, do_parse, many0, named, separated_list0, tag, terminated};
|
||||
|
||||
#[macro_use]
|
||||
mod macros;
|
||||
|
@ -81,7 +81,7 @@ named!(pub decl(&str) -> Decl, alt!(
|
|||
fun_decl
|
||||
));
|
||||
|
||||
named!(pub toplevel(&str) -> Vec<Decl>, many0!(decl));
|
||||
named!(pub toplevel(&str) -> Vec<Decl>, terminated!(many0!(decl), multispace0));
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
|
@ -114,5 +114,10 @@ mod tests {
|
|||
fn main = plus (id 2) 7"
|
||||
);
|
||||
assert_eq!(res.len(), 3);
|
||||
let res = test_parse!(
|
||||
toplevel,
|
||||
"fn id x = x\nfn plus x y = x + y\nfn main = plus (id 2) 7\n"
|
||||
);
|
||||
assert_eq!(res.len(), 3);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue