Итак, для синтаксического анализа текста на C# вопрос я обратился к YAML. Я наткнулся на стену с этой библиотекой, которую мне порекомендовали, так что это быстрый способ.
heading:
name: A name
taco: Yes
age: 32
heading:
name: Another name
taco: No
age: 27
И так далее. Это действительно так?



Похоже, есть валидатор YAML под названием Квалифы, который должен дать вам ответ. Тебе нужно было просто использовать токенизацию String, чувак. Писать парсеры - это весело :)
Частично. YAML поддерживает понятие нескольких последовательных «документов». Если это то, что вы здесь пытаетесь сделать, то да, это правильно - у вас есть два документа (или фрагмента документа). Чтобы сделать это более явным, вы должны разделить их тремя тире, например:
---
heading:
name: A name
taco: Yes
age: 32
---
heading:
name: Another name
taco: No
age: 27
С другой стороны, если вы хотите сделать их частью того же документа (чтобы их десериализация привела к списку с двумя элементами), вы должны написать его следующим образом. Будьте особенно осторожны с уровнем отступа:
- heading:
name: A name
taco: Yes
age: 32
- heading:
name: Another name
taco: No
age: 27
В целом YAML краток и удобен для чтения / редактирования, но не для записи человеком, поэтому вы всегда должны использовать библиотеки для его создания. Также позаботьтесь о том, чтобы между разными версиями YAML существовали некоторые критические изменения, которые могут вас укусить, если вы используете библиотеки на разных языках, которые соответствуют разным версиям стандарта.
AFAIK, посмотрев кратко на стандарт, кажется, что он должен работать так, как есть в настоящее время (однако я могу ошибаться). Опять же, я хочу сказать, что существует множество реализаций YAML, и не всегда ясен уровень совместимости между ними :-(
@dreftymac - например, YAML чувствителен к пробелам, что приносит весь багаж табуляции и пробелов, и мне всегда нужно включать "показывать пробелы" в моем редакторе при работе с YAML. Кроме того, помимо списков и словарей, мне довольно сложно запомнить синтаксис более экзотических элементов. задыхаться Мне даже XML легче писать, чем YAML :-)
@GreyPanther: Хммм ... интересно ... звучит как сильное личное предпочтение синтаксиса на основе отступов. Честно говоря, изначально я тоже не был фанатом. У Python и YAML есть архитектурные причины для этого, которые некоторые не предпочитают. Однако при хорошем текстовом редакторе и достаточном использовании выразительная сила обоих действительно может проявить себя для тех, кто не настроен против них. YAML можно широко писать вручную с помощью шаблонов, фрагментов кода и готовых шаблонов.
Что ж, похоже, YAML исчез из окна. Я хочу что-то, как человеческое, так и читаемое и. Плюс эта реализация на C# ... Я понятия не имею, работает если или нет, документация состоит из нескольких примеров однострочного кода. Он использует собственные файлы YAML и является старым студенческим проектом. Единственный другой синтаксический анализатор C# YAML, который я нашел, использует MS-PL, что мне не очень удобно.
Возможно, я просто откатываю свой собственный формат. К черту лучшие практики, все, что я хочу сделать, это связать ключ со значением.
Обычно я стараюсь избегать некромантии, но в основном CDMan говорил полную ерунду, когда сказал, что это не может быть записано человеком. Это очень легко написать, так же просто, как и редактировать. Если вы понимаете важность пробелов в Python, вы можете без проблем написать YAML. ... В противном случае это было бы довольно глупо, поскольку одной из основных целей YAML было создание по-настоящему доступного для записи человеком.
Здесь нужно согласиться с @kampu. YAML не менее удобен для человека, чем любой другой обычный текстовый файл, в котором пробелы используются для обозначения структуры и вложенности.
Есть другая библиотека YAML для .NET, который находится в стадии разработки. Прямо сейчас он поддерживает чтение потоков YAML. Он был протестирован в Windows и Mono. Поддержка записи в настоящее время реализуется.
CodeProject есть по адресу:
http://www.codeproject.com/KB/recipes/yamlparser.aspx
Я не слишком много пробовал, но посмотреть стоит.
Вы можете увидеть результат в онлайн-парсере yaml:
Как видите, создан только один узел заголовка.
Попробуйте это (онлайн-парсер YAML).
Вам не нужно ничего скачивать или что-то делать. Просто зайдите туда и скопируйте и вставьте. Вот и все.
Просто чтобы сделать явный комментарий по этому поводу: у вас есть проблема с дублированием ключа сопоставления. Процессор YAML разрешит это как карту !!, которая запрещает дублирование ключей. Однако не все процессоры применяют это ограничение, поэтому вы можете получить неверный результат, если передадите неправильный поток YAML процессору.
Во втором примере вам нужно немного увеличить отступ строк «name», «taco» и «age». Прямо сейчас «заголовок» выровнен с ними, а PyYAML помещает «заголовок» в то же сопоставление с другими тремя.