Парсер - писать самому или взять генератор
От: bybor  
Дата: 15.06.09 12:52
Оценка:
Надо написать парсер выражений. Язык программирования — C#. В выражении могут быть арифметические операции, предопределенные функции (MIN, MAX, ABS, ...), и в качестве переменных — названия полей таблиц базы данных. Парсер будет использоваться для "вычисляемых" полей в отчётах. Вычисление будет задаваться выражением, которое требуется разобрать (желательно на этапе ввода, чтобы не заниматься этим при отображении отчёта), подставить туда значения для текущего кортежа и вернуть результат.

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

Вопрос собственно по реализации. Можно всё это сделать самому или попробовать ANTLR (Coco/R ? ).
Опыта в этой области нет вообще. Если делать самому, то всё не очень страшно, но смущает дальнейшее расширение функциональности. Например, логические операции или ещё что-нить такое. В готовых примерах, на которые я натыкался — на том же CodeProject, почти весь код имеет некоторые ограничения — например поддержка унарных операторов или вложенные скобки в логических выражениях. Я не понимаю, являются ли эти задачи сложными для реализации, или они настолько тривиальны, что авторы не стали тратить на это время.

Может быть лучше будет построить грамматику и использовать ANTLR/CocoR для генерации кода парсера на C#? Насколько это будет трудоёмко для чайника? И насколько хорошо в эту грамматику лягут названия полей из базы данных?

Время на разработку как бы есть, но чем быстрее, тем лучше.

Спасибо.
парсер
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.