.NET

2011-03-29 13 views
6

के लिए एक सूत्र दुभाषिया की आवश्यकता है मैं एक सूत्र दुभाषिया की तलाश में हूं जिसे मैं एक सी # अनुप्रयोग में उपयोग कर सकता हूं। यह इस तरह से एक स्ट्रिंग व्याख्या करने के लिए सक्षम होने की जरूरत:.NET

max(1+2, 4) * x 

मैंने पाया Writing a fast formula interpreter (codeproject.com) जो लगभग मैं क्या जरूरत है, लेकिन यह अनेक मानकों के साथ कार्यों के लिए अनुमति नहीं है करता है। मैं शायद उस कार्यक्षमता को जोड़ सकता हूं लेकिन मैं बस सोच रहा था कि ऐसा कुछ पहले से मौजूद है या नहीं।

धन्यवाद

+1

संभावित डुप्लिकेट: http://stackoverflow.com/questions/4629/c-eval-equivalent –

+0

एक अन्य संभावित डुप्लिकेट: http://stackoverflow.com/questions/355062/is-there-a-string-math- मूल्यांकनकर्ता-इन-नेट –

+1

ये प्रश्न अपेक्षाकृत पुराने हैं - कॉर्बिन्स दो परियोजनाओं के पहले से ही लिंक का जवाब देता है, इनमें से किसी एक प्रश्न में उल्लिखित नहीं है, इसलिए मैं सवाल खोलता हूं। – Justin

उत्तर

1

आप वास्तव में पार्स करने से एक बहुत प्रभावी दुभाषिया निर्माण कर सकते हैं और और dynamically building and executing के साथ max जैसे कुछ कार्यात्मक कीवर्ड को प्रतिस्थापित करना सी # कक्षा और विधि के रूप में सूत्र। तो वास्तव में आप फॉर्मूला को पार्सिंग और रैपिंग करेंगे और सी # कंपाइलर को व्याख्या और निष्पादित करने की इजाजत देंगे।

public class MyFormula 
{ 
    public double calc(double x) 
    { 
     return Math.Max(1+2, 4) * x; 
    } 
} 

जो तुम उड़ पर संकलन और फिर जुड़ा हुआ लेख के अनुसार निष्पादित करें:

तो, max(1+2, 4) * x के अपने नमूना सूत्र लेने में बदल जाएगा। आपको अभी भी एक्स मान के लिए पार्स करना होगा और पास करना होगा।

+0

कुछ सुरक्षा सावधानी बरतने पर यह खतरनाक लगता है। – Ozzah

+0

@ ओझाः यह एसक्यूएल इंजेक्शन की तरह नहीं है। एक बात के लिए, आप इनपुट की मात्रा को सीमित कर देंगे, और फिर आप अधिकतम, पाप, कॉस इत्यादि जैसे गणित शब्दों के लिए पार्सिंग करेंगे। कुछ भी जो कोशेर नहीं है, सिंटैक्स त्रुटि के रूप में विफल हो जाएगा। –

1

एक परियोजना में बहुत समय पहले मुझे फॉर्मूला के साथ कुछ बुकिंग करना पड़ा, और मैंने VsaEngine का उपयोग किया। इस इंजन का उपयोग करने के लिए आपको Microsoft.JScript पर संदर्भ जोड़ने की आवश्यकता है।

उपयोग के लिए कोड बहुत सरल है, जैसे सूत्र मानकों की जगह: यहां

string formula = "x+y"; 
formula= formula.Replace("x","100").Replace("y","200"); 
string result = CalculateFormula(formula); 

और है कोर विधि, CalculateFormula: यहाँ उदाहरण है

public string CalculateFormula(string evaluationString) 
{ 
     VsaEngine en = VsaEngine.CreateEngine(); 
     Object result = Eval.JScriptEvaluate(evaluationString, en); 
     return result.ToString(); 
} 

इस आप अपने कस्टम बना सकते हैं के साथ सूत्र दुभाषिया इंजन।