разбирать конкретные данные в C # - PullRequest
3 голосов
/ 19 апреля 2011

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

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 ]

1 голос
/ 19 апреля 2011

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

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

0 голосов
/ 19 апреля 2011

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

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

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

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

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

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

...