Построение интерпретатора формата документа

Я собираюсь начать разработку своего собственного формата документа (например, PDF, XPS, DOC, RTF...), но я хочу знать, где я могу прочитать некоторые учебные пособия, инструкции...? Мне не нужен код, это проект, в котором я хочу научиться его создавать, а не использовать чужой опыт.

PS: я хочу сделать это как файл XML:

[Command Argument="Define it" Argument2="Something"]

Это похоже на PDF, но этот синтаксис будет интерпретирован программой, которую я создам с помощью C#, точно так же, как HTML и ваш браузер;)

Помните, что мой вопрос касается программы, которая будет интерпретировать этот код, но лучше начать с учебника по интерпретации XML-кода;)


person Nathan Campos    schedule 06.11.2009    source источник
comment
Вы серьезно ожидаете, что будут туториалы по переизобретению колеса?   -  person Henk Holterman    schedule 06.11.2009
comment
Нет, но я хочу научиться сам, а не использовать код какого-то пользователя здесь и ничему не научиться.   -  person Nathan Campos    schedule 07.11.2009


Ответы (5)


Звучит как хороший учебный проект, и у вас уже есть несколько хороших советов. Я бы только добавил, что вы должны помнить, что есть разница между языком файла документа и форматом документа.

Рассмотрим OOXML, это формат документа, построенный на основе XML (что я бы описать как язык файла). Если ваша цель — научиться создавать собственный формат документа, я настоятельно рекомендую начать с XML, чтобы вам не пришлось заново изобретать анализатор языка. Это позволит вам сосредоточиться на проблемах, связанных с созданием формата.

Тем не менее, хорошо, если вы хотите поиграть с созданием собственного языка; просто хотел убедиться, что вы поняли, что это разные звери.

Вот несколько ссылок, которые помогут вам начать работу с XML в C#:

person akmad    schedule 06.11.2009
comment
Но вы можете добавить несколько ссылок на учебники по интерпретации XML-кода, пожалуйста? - person Nathan Campos; 07.11.2009

Я предполагаю, что вы делаете это ради того, чтобы научиться это делать. Если это так, то это стоящее предприятие, и я понимаю.

Вы захотите начать с изучения синтаксических анализаторов и грамматик LL. Это поможет вам интерпретировать документ, который был прочитан из файла, в объектную модель документа (DOM). Оттуда вы можете создавать подпрограммы для управления этим деревом документов или его визуализации.

Удачи!

person Jason Kleban    schedule 06.11.2009
comment
Хороший ответ, с одним предложением. Если Натан больше заинтересован в изучении деревьев документов, чем в анализе потока, он может сократить анализ потока с помощью регулярных выражений. - person Kennet Belenky; 07.11.2009
comment
Возможно, я делаю это неправильно, но регулярное выражение кажется 1) волшебным, 2) неэффективным и 3) трудно доказуемым. А если серьезно, я мог просто сделать это неправильно, возможно, регулярное выражение - очень чистое решение. НО, я думаю, что синтаксический анализатор LL - это хорошая вещь для изучения. - person Jason Kleban; 07.11.2009
comment
Дело в том, что Regex, на мой взгляд, сбивает с толку. - person Nathan Campos; 07.11.2009
comment
Если регулярные выражения сбивают с толку, это еще одна причина научиться их использовать :) - person Kennet Belenky; 07.11.2009
comment
Регулярные выражения были просто предложением. Из вашего исходного поста было неясно, хотите ли вы изучить синтаксический анализ потока или структуры данных документа, или и то, и другое. - person Kennet Belenky; 07.11.2009
comment
Хорошо, я посмотрю на Regex;) - person Nathan Campos; 07.11.2009

Я не понимаю, о чем вы спрашиваете, но если вам нужен собственный формат, например, файл XML, почему бы просто не использовать XML для описания формата?

Редактировать: Хорошо, я думаю, что теперь понял. Если вы делаете это для развлечения и для обучения (что здорово), то есть много подходов, которые можно использовать. На самом деле, может быть даже лучше не проводить никаких исследований, попытаться найти решение самостоятельно и посмотреть, работает ли оно, что вам нужно сделать, чтобы улучшить его и т. д.

person Jon Seigel    schedule 06.11.2009
comment
Я собираюсь создать что-то вроде PDF, но его синтаксис будет похож на XML, и я создам программу, которая читает этот синтаксис и интерпретирует его, точно так же, как HTML и ваш браузер. - person Nathan Campos; 06.11.2009
comment
Вам не нужно. Если ваш формат является допустимым XML, вы можете использовать существующие инструменты для его анализа. Тогда все, что вам нужно сделать, это интерпретировать информацию. - person Jon Seigel; 07.11.2009
comment
Дело в том, что я хочу построить такой синтаксис, но все дело в программе, которая его интерпретирует. - person Nathan Campos; 07.11.2009

Я далек от того, чтобы запрещать вам заново изобретать велосипед ради изучения чего-то нового. Хорошо, что вы попробовали это. Однако, если вы собираетесь задавать вопросы о том, как это сделать, вам нужно немного конкретизировать свои вопросы.
Вам нужна помощь по:

  • Разработка вашего фреймворка/формата
  • Планирование своего времени / Оценка сроков
  • Работа с XML
  • Работа с С#
  • Создание веб-приложения C#
  • Создание приложения C# для ПК
  • Другие аспекты разработки полностью

Здесь много людей, которые хотят помочь, но лучшие ответы даются на целенаправленные вопросы (не обязательно конкретные, но всегда целенаправленные).

person Sean Vieira    schedule 06.11.2009
comment
Создание интерпретатора моего собственного типа документа (указанного в вопросе) на С#. - person Nathan Campos; 07.11.2009

Есть несколько подходов к этому. Одним из способов было бы сначала определить формат файла, а затем использовать генератор синтаксического анализатора для создания кода C#, который может читать этот формат. выполнение поиска в Google по «генератору синтаксического анализатора С#» даст вам ссылки на ряд различных библиотек, которые вы можете использовать.

В качестве альтернативы вы можете написать свой собственный синтаксический анализатор с нуля. Это потребует больше работы, чем использование инструмента генерации синтаксического анализатора, но в конечном итоге может оказаться более поучительным.

Подход «определить грамматику» может быть излишним для простого формата. Другой способ решить эту проблему — сначала спроектировать дерево объектов, которое вы будете использовать в приложении, а затем написать процедуры сериализации и десериализации для сохранения и загрузки содержимого из файла. Интерфейс сериализации в C# довольно гибкий, и вы можете легко сериализовать его в двоичные или XML-файлы.

Я думаю, что должно быть относительно просто создать свой собственный сериализатор для создания файла в любом удобном для вас формате, но MSDN сегодня не мой друг, поэтому я не могу найти соответствующую документацию.

person Mark Bessey    schedule 06.11.2009