Я пытаюсь написать синтаксический анализатор имени, который распознает многострочные комментарии ...
/*
yo!
*/
... и потребляет / отбрасывает (то же самое, верно?) Результат:
use nom::{
bytes::complete::{tag, take_until},
error::{ErrorKind, ParseError},
sequence::preceded,
IResult,
};
fn multiline_comment<'a, E: ParseError<&'a str>>(i: &'a str) -> IResult<&'a str, &'a str, E> {
preceded(tag("/*"), take_until("*/"))(i)
}
Это почти работает. Я знаю, что take_until останавливается как раз перед */
, но я не знаю, что делать, чтобы включить его.
#[test]
fn should_consume_multiline_comments() {
assert_eq!(
multiline_comment::<(&str, ErrorKind)>("/*abc\n\ndef*/"),
Ok(("", "/*abc\n\ndef*/"))
);
}
дает результат
thread 'should_consume_multiline_comments' panicked at 'assertion failed: `(left == right)`
left: `Ok(("*/", "abc\n\ndef"))`,
right: `Ok(("", "/*abc\n\ndef*/"))`'
Так что мойВопрос в том, как мне получить полный комментарий, включая окончание */
Спасибо!