Nom - это библиотека комбинаторов парсеров, написанная на Rust.
1 ответ

Как сопоставить ровно один байт, используя nom?

Я хочу соответствовать ровно одному буквенному символу (a-zA-Z) с ном. Я знаю, что могу с жадностью соответствовать take_while! с чем-то вроде этого: // match one or more alphabetical characters pub fn alpha_many(input: &[u8]) -> IResult<&…
02 янв '18 в 00:57
1 ответ

Как сожрать нить до разделителя или до конца с ржавчиной / ном

Я учусь Nom, и в качестве тестового примера я пытаюсь разобрать строку до разделителя. Если мой разделитель, скажем, /тогда я хочу сопоставить все до этого разделителя. Для этого парсер вроде named!(gobbledygook, take_until!("/")); работает. Но я та…
02 янв '19 в 16:13
3 ответа

Как использовать nom для разбора строки со знаком в i32?

Используя ящик я пытаюсь написать парсер, который может распознать подписанный i32 номер из String т.е. может преобразовать строку -42 в i32 представление. До сих пор я придумал следующее, но мне не удалось разобрать отрицательные числа: use nom::ty…
17 фев '19 в 17:16
1 ответ

Условный анализ массива на основе предыдущих элементов с помощью nom

Мне нужно проанализировать массив 32-битных целых чисел (с прямым порядком байтов) из массива u8s, однако следующий тип int существует, только если установлен 31-й бит текущего типа int. Если остальные не существуют, тогда остальная часть массива до…
06 апр '18 в 16:03
1 ответ

Имеет ли смысл использовать `nom` для обработки пользовательских типов перечислений?

Я пытаюсь реализовать синтаксический анализатор для простого языка запросов. Цель состоит в том, чтобы генерировать operations из текста, а затем оцените их, прежде чем передать их вверх по дереву. Если я правильно понимаю, мне придется реализовать …
16 дек '17 в 21:55
1 ответ

Почему преобразование CompleteStr Nom в строку в макросе с именем! вернуть результат?

Когда я пытаюсь конвертировать Nom's CompleteStr к String в named!Я получаю сообщение об ошибке, сообщающее, что он возвращает Result, named!(letter_cs<CompleteStr,String>, map_res!( alpha, |CompleteStr(s)| String::from(s) ) ); выдаст ошибку e…
27 ноя '18 в 06:32
1 ответ

Разбор верблюжьих строк с ном

Я хочу разобрать строку как "ParseThis" или же "parseThis" в вектор строк, таких как ["Parse", "This"] или же ["parse", "this"] используя номинальный ящик. Все попытки, которые я пробовал, не дают ожидаемого результата. Возможно, я пока не понимаю, …
12 фев '17 в 02:50
1 ответ

Разбор целого числа с помощью nom

Я ожидал, что это будет довольно легко, но оказывается, что это не так. Практически все, что я пробую, дает мне "Incomplete(Size(1))". Моя лучшая догадка сейчас: named!(my_u64(&str) -> u64, map_res!(recognize!(nom::digit), u64::from_str) ); Т…
10 июл '18 в 03:54
1 ответ

Разобрать целое число с плавающей точкой, используя Nom

У Nom есть пример анализа числа с плавающей запятой: named!(unsigned_float <f32>, map_res!( map_res!( recognize!( alt!( delimited!(digit, tag!("."), opt!(complete!(digit))) | delimited!(opt!(digit), tag!("."), digit) ) ), str::from_utf8 ), Fro…
14 мар '17 в 15:45
0 ответов

Разбор буквенно-цифровых идентификаторов с подчеркиванием и вызов из парсера верхнего уровня

Попытка сделать что-то похожее на этот вопрос, за исключением разрешения подчеркивания, начиная со второго символа. Не только верблюжий случай. Я могу успешно протестировать синтаксический анализатор, но при составлении синтаксического анализатора б…
09 июн '17 в 20:47
1 ответ

Как проанализировать объемную строку Redis RESP, используя nom?

Мне нужно использовать nom для разбора запроса / ответа RESP. Когда я прихожу к громоздкой, такой как "$6\r\nfoobar\r\n" или же $-1\r\n Сначала я пишу функции для извлечения данных из данных. named!(signed_digits<&str, (Option<&str>…
20 фев '19 в 16:00
1 ответ

Как правильно вернуть простую пользовательскую ошибку с помощью функции errorkind?

Простой обработчик ошибок добавлен в nom Первый компилируется без ошибок, второй выдает ошибки use nom::*; use std::str; // This works named!( field<&str>, map!( complete!(add_return_error!( ErrorKind::Custom(1), preceded!( tag!("."), reco…
20 мар '18 в 22:39
2 ответа

Как реализовать подобный take_until_and_consume комбинатор парсера, который не пропускает тег?

Я хотел бы написать комбинатор имени синтаксического анализатора, который занимает столько байтов до и включая последовательность тегов. Я пытался с помощью take_until_and_consume!, но я обнаружил, что сгенерированный синтаксический анализатор отбра…
19 ноя '17 в 17:21
0 ответов

Основной разбор с ном

Я совершенно новый для nom (и комбинаторы парсеров в целом). Я хочу проанализировать строки с плавающей точкой, используя что-то вроде этого: named!( get_four_floats<(f32, f32, f32, f32)>, ws!(do_parse!( r1: float >> r2: float >> r…
24 янв '19 в 10:26
0 ответов

Объединение макросов с библиотекой nom

Я пытаюсь использовать библиотеку nom для разбора строки FEN. Я использовал alt! макрос для объединения трех меньших комбинаторов, которые работают с одним символом. Теперь я хотел бы использовать этот же комбинатор для разбора строки символов в век…
20 дек '18 в 08:44
1 ответ

Соответствует одному из нескольких байтов в номе

Я использую NOM для анализа некоторых двоичных данных сборки 65c816. Часть моей структуры синтаксического анализатора разбивает коды операций на их отдельные формы и затем захватывает их параметры, если они есть. Пример парсера в настоящее время выг…
09 июн '17 в 04:31
0 ответов

Используйте nom, чтобы найти несколько элементов в строке

Я пытаюсь написать парсер, который принимает &str и возвращает Vec<&str> где строки Vec - это IP-адреса. Единственный парсер, который я действительно могу получить, это Vec<Option<&str>> где None представляет байт, кото…
19 мар '18 в 17:53
1 ответ

Почему nom ожидает &str, когда я передаю CompleteStr?

Парсер работает как положено, пока я не захочу разобрать h: цифра, которая всегда является последней цифрой в строке, и компилятор дает мне ^ expected &str, found struct `nom::types::CompleteStr` Я предполагаю, что это потому, что парсер смотрит…
20 ноя '18 в 01:22
3 ответа

How to parse complete f32 with nom?

Есть функция float_s that parses floats in stream mod (can return Incomplete). Я хочу использовать CompleteStr as input type instead. Как мне этого добиться? Simple approach fails with complains about &str а также CompleteStr mismatches: named!(…
18 июл '18 в 10:25
2 ответа

Как сопоставить любой из Векторов строк с nom?

Я пытаюсь создать парсер с nom, который будет анализировать некоторый текст, который может быть одним из многих вариантов. Ном имеет alt! когда значения известны во время компиляции, но мои значения не будут. Это была моя попытка создать свой собств…
08 июн '17 в 19:38