Je suis à la recherche d'un langage qui puisse facilement analyser des expressions mathématiques, mais aussi être capable d'appeler des fonctions et des variables de référence si nécessaire. Jeval semble être ce que je cherche, mais malheureusement je travaille en C#. Existe-t-il un .Net basé sur jeval?Y at-il quelque chose de similaire à jEval pour C#/.net?
Répondre
En C# 4.0, il n'y a rien directement disponible pour vous. On s'attend à ce que dans C# 5.0, vous le voyiez, mais cela ne vous aide pas maintenant.
Il y a une alternative ... vous pouvez utiliser le code DOM pour compiler un code à la volée, puis exécutez: Quick example.
Il y a, malheureusement, quelques inconvénients importants à cette approche. D'abord, c'est lent. Sur une machine moderne, cela peut prendre jusqu'à un quart de seconde, juste pour compiler le plus petit extrait de code. Deuxièmement, vous créez en fait une nouvelle DLL chargée à chaque fois que vous le faites. Si vous avez un système qui aime beaucoup exécuter du code dynamique, vous aurez une tonne de DLL générées dynamiquement dans votre espace de travail. Pour résoudre ce problème, vous pouvez exécuter le code dynamique dans un domaine d'application distinct, mais vous commencez à devenir vraiment compliqué.
Ma recommandation: Utiliser un langage de script intégré, comme IronRuby et générer du code Ruby à la place. Vous pouvez évaluer les langages de script intégrés de manière beaucoup plus rapide que l'approche que je viens de décrire.
Iron Python est un bon aussi. Surtout s'il connaît déjà Python. – marr75
C'est une approche très dangereuse ... tout code valide entré par l'utilisateur pourrait être compilé et exécuté, et vous ne pouvez pas facilement vérifier que ce code est sûr. –
Je considère l'approche ironpython, je ne suis pas trop inquiet au sujet des personnes modifiant potentiellement les fichiers de script.Je suis plus préoccupé par le fait d'avoir quelque chose qui peut sembler syntaxiquement assez simple, mais référence les variables et les fonctions facilement – Calvin
Vous pouvez utiliser un langage DLR comme IronRuby pour ce faire. Vous pouvez exécuter (eval) un fichier de script à partir d'une application C#.
Vous pouvez le faire avec la réflexion. Je n'ai pas les détails avec moi, mais j'ai utilisé la réflexion pour exécuter une chaîne contenant le nom d'un objet que je voulais utiliser.
Si JavaScript vous semble intéressant, jetez un oeil à Jint, un interpréteur JS pour .NET. Au lieu de compiler du code et de traiter avec AppDomains, Jint implémente réellement un interpréteur JS. Vous pouvez exposer des variables/méthodes de vos classes .NET à des scripts, et les scripts peuvent renvoyer des valeurs à votre application C#.
Vaut vraiment le détour.
Il y a un moyen facile de le faire, en utilisant la fonction JScript eval
:
créer un fichier source JScript, JsMath.js:
class JsMath { static function Eval(expression : String) : double { return eval(expression); }; }
compilez à une DLL:
> jsc /t:library JsMath.js
dans votre projet C#, ajoutez une référence à JsMath.dll et appeler la méthode
JsMath.Eval
:double x = JsMath.Eval("2 + 3 * 4");
- 1. Quelque chose de similaire à jMonkey Engine pour C#
- 2. Quelque chose de similaire à git-svn pour Perforce?
- 3. Y a-t-il quelque chose de similaire à l'énumération de python pour linq
- 4. Y a-t-il quelque chose de similaire à AutoMapper pour Objective-c?
- 5. Y at-il une bibliothèque iPhone pour fournir quelque chose de similaire à un popover iPad?
- 6. NetworkStream, y a-t-il quelque chose de similaire à DataReceived pour un SerialPort? (C#)
- 7. Y a-t-il quelque chose de similaire à asp.net mvc pour winforms ou wpf?
- 8. NSPopup ou quelque chose de similaire pour indiquer la progression
- 9. Y a-t-il quelque chose de similaire à "Ajouter une référence de service" dans XCode?
- 10. Y at-il un moyen de créer quelque chose de similaire à l'alerte Javascript dans GWT?
- 11. Quelque chose de similaire à Hibernate en PHP?
- 12. Y a-t-il quelque chose de similaire à l'énumération de gravité dans la BCL?
- 13. Je cherche quelque chose de similaire à AdRotator dans .NET
- 14. Puis-je implémenter quelque chose de similaire à iOS "Folders"?
- 15. Y at-il quelque chose de similaire à isfile() isdir() avec ftp en Python?
- 16. Y a-t-il quelque chose de similaire à Google Map Chart?
- 17. Y a-t-il quelque chose de similaire à Oracle Analytics dans SQL Server 2008?
- 18. Y at-il quelque chose de similaire à HttpURLConnection en Perl?
- 19. Y a-t-il quelque chose comme Acegi pour PHP?
- 20. je dois correspondre à une police d'un designer à quelque chose de similaire pour le web
- 21. jQuery: Retard de fadeIn, slideDown ou quelque chose de similaire
- 22. Mysql to SQL Server: y a-t-il quelque chose de similaire au cache de requêtes?
- 23. Y a-t-il un Subversion Checkout Hook ou quelque chose de similaire?
- 24. fait XElement a quelque chose de similaire XmlNodeList
- 25. Existe-t-il quelque chose de similaire à Source Code Outliner Power Toy pour VS2010?
- 26. Y at-il une API pour quelque chose comme ça?
- 27. Y a-t-il quelque chose comme bpython pour Ruby?
- 28. Y at-il quelque chose de similaire à la grille de sélénium lors de l'utilisation de concombre/capybara?
- 29. Comment créer un arbre d'expression pour faire quelque chose de similaire à la commande SQL "J'aime"
- 30. Y a-t-il quelque chose comme PyFlakes pour PHP?
fait, quelqu'un sait plus sur l'évaluateur d'expression discuté ici: http://www.codeproject.com/KB/recipes/eval3.aspx? Cela peut suffire à mes besoins tant que je peux ajouter des macros et des fonctions d'appel. – Calvin