#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, поэтому вы не будете тратить свое время на то, что скоро исчезнет