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