C # динамическая компиляция и генерация кода - PullRequest
1 голос
/ 24 марта 2012

Я даю пользователю возможность вводить строки с уникальными ключами, которые представляют собой однострочный сложный оператор c # (одна строка кода, подобная ' 2 + (a - (x && y? 1: 7)) '. Оператор может использовать переменные Nullable<bool> и Nullable<double>. При запуске у меня есть Dictionary<string, object> предопределенных значений. Пользователь может использовать эти переменные и стандартные операторы c #: +, -, *, /, &&, ||,!, (),>,> =, <, <=, ==,! =,? a: b, ??. </p>

Мне нужно повторно использовать механизм приоритетов операторов c # и ошибки компиляции, предупреждения и сообщения(что выводится после компиляции)

  1. как скомпилировать входную строку и получить сообщения об ошибках?
  2. как предопределить переменные, которые используются в строке, перед компиляцией (сгенерировать код как var x = new Nullable<bool>(true); или что-то иное)?
  3. можно ли получать сообщения об ошибках на русском языке?
  4. можно ли сохранить результат компиляции для улучшения производительности (функция будет вызываться несколько раз позже)?

1 Ответ

2 голосов
/ 24 марта 2012

Как правило, вы используете синтаксический анализатор выражений, такой как NCalc , чтобы сделать это. У них часто есть API, который довольно легко адаптировать к вашим требованиям.

возможно ли получать сообщения об ошибках на русском языке?

Это, вероятно, будет самым сложным из ваших требований, если вы используете существующую библиотеку. Однако NCalc или один из других синтаксических анализаторов библиотек выражений с открытым исходным кодом могут быть изменены для предоставления русских сообщений об ошибках.

...