разбор конкретных данных на C#

#c# #parsing #mgrammar

#c# #синтаксический анализ #mgrammar

Вопрос:

У меня есть данные, хранящиеся в определенном текстовом формате:

 FIDS_A1=CF_LAST:1|line_NETCHNG:2|QoS:3; FIDS_A2=[High and Low]:[{High} – {Low}]:1|CF_LAST:2; FIDS_A3=YR_RANGE:3|VOL:3; FIDS_A4=GR_AskBid; FIDS_C3=line_BID:3|line_ASK:3;
  

Мне нужно разобрать их и получить из них структуру данных, типизированную на C #.

Написать синтаксический анализатор на C # непросто (очень много регулярных выражений и жесткого кода).

Я что-то слышал об Oslo MGrammar от Microsoft. Генерирует ли этот инструмент код синтаксического анализа C # для моих конкретных данных?

Вывод мне нужен только код синтаксического анализатора на C # без ссылок на другие библиотеки.

Комментарии:

1. Во многом зависит от того, как выглядят текстовые данные… Не хотите поделиться?

2. На самом деле написать синтаксический анализатор на C # очень просто, просто это требует много работы. Генераторы синтаксических анализаторов очень помогают.

Ответ №1:

Вы могли бы взглянуть на GOLD Parser Builder и на движок bsn GoldParser (который может создавать типизированную структуру данных при разборе данных с использованием грамматики, созданной с помощью GOLD).

Также есть статья CodeProject, в которой показано, как использовать этот движок.

Комментарии:

1. Это хорошее решение, но анализатор результатов будет содержать bsn. ссылка на GoldParser. Но мне нужен только исходный код на C #, не зависящий от других библиотек

2. Вы всегда можете использовать ILMERGE для объединения внешней библиотеки с вашим проектом, чтобы не было (видимой) внешней ссылки.

Ответ №2:

Генераторы синтаксических анализаторов не помогают вам избежать регулярных выражений. Фактически, по крайней мере, для генераторов, которые я использовал, генератор синтаксического анализа является вторым этапом синтаксического анализа. Он принимает поток токенов и выводит абстрактное синтаксическое дерево.

Чтобы преобразовать текст в токены, вы должны написать лексер, который может включать регулярное выражение или три.

Если язык достаточно прост, вам может показаться, что написать анализатор с нуля не так сложно, как научиться использовать генератор синтаксического анализа.

Ответ №3:

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

Я предлагаю использовать ANTLR, который:

  • способен генерировать очень мощные анализаторы на C # среди прочих.
  • это очень зрелый продукт — имеет собственную среду разработки с отладчиком
  • использует стандартные грамматики EBNF, поэтому вы не будете тратить свое время на то, что скоро исчезнет