2012-03-23 4 views
1

Je donne la possibilité à l'utilisateur d'entrer des chaînes avec des clés uniques représentant un opérateur complexe C# sur une ligne (une ligne de code comme '2 + (a - (x & & y? 1: 7)) » opérateur peut utiliser Nullable<bool> et Nullable<double> les variables Au début je Dictionary<string, object> des valeurs prédéfinies L'utilisateur peut utiliser ces variables et opérateurs Standart C#:... +, -, *, /, & &, ||, !,(),>,> =, <, < =, ==,! =,? A: b, ??.Compilation dynamique C# et génération de code

Je dois réutiliser C# opérateurs mécanisme de priorité et les erreurs de compilation, les avertissements et les messages (qui va à la sortie après la compilation)

  1. comment compiler une chaîne d'entrée et obtenir des messages d'erreur?
  2. comment prédéfinir les variables utilisées dans la chaîne, avant la compilation (générer un code comme var x = new Nullable<bool>(true); ou autre)?
  3. est-il possible d'obtenir des messages d'erreur en langue russe?
  4. Puis-je stocker le résultat de la compilation pour améliorer la perfomance (la fonction sera appelée plusieurs fois plus tard)?

Répondre

2

Typiquement, vous utiliseriez un analyseur d'expression, tel que NCalc, pour ce faire. Ils ont souvent une API qui serait assez facile à adapter à vos besoins.

est-il possible d'obtenir des messages d'erreur en langue russe?

Ce serait probablement le plus difficile de vos besoins, si vous utilisez une bibliothèque existante. Toutefois, NCalc ou l'un des autres analyseurs de bibliothèque d'expressions à source ouverte peuvent être modifiés pour fournir des messages d'erreur russes.