Разбирать конкретные данные в C#

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

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# (очень много регулярных выражений и жесткого кода).

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

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

3 ответа

Решение

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

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

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

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

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

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

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

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