2012-03-23 8 views
1

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

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

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

ответ

2

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

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

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

Смежные вопросы