>  기사  >  백엔드 개발  >  C# 수학 연산 표현식 인터프리터의 샘플 코드에 대한 자세한 소개

C# 수학 연산 표현식 인터프리터의 샘플 코드에 대한 자세한 소개

黄舟
黄舟원래의
2017-03-13 17:48:121892검색

C#수학적 연산표현식Interpreter


테스트 파일 내용:

a=2+3*2;
b=2*(2+3);

찾아보기 버튼 이벤트 핸들러:

<p style="margin-bottom: 7px;">        private void button_browse_Click(<a href="http://www.php.cn/wiki/60.html" target="_blank">object</a> s<a href="http://www.php.cn/wiki/1048.html" target="_blank">end</a>er, EventArgs e)<br/>        {<br/>            Open<a href="http://www.php.cn/wiki/1313.html" target="_blank">File</a>Dialog fbd = <a href="http://www.php.cn/wiki/165.html" target="_blank">new</a> OpenFileDialog();<br/>            fbd.Title = "请选择一个文件:";<br/>            fbd.CheckFileExists = true;<br/>            fbd.CheckPathExists = true;<br/>            fbd.Filter = "*.txt(文本文件)|*.txt|*.*(所有文件)|*.*";<br/>            fbd.FileName = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);<br/>            <a href="http://www.php.cn/wiki/109.html" target="_blank">if</a> (fbd.ShowDialog() == System.Windows.<a href="http://www.php.cn/wiki/125.html" target="_blank">For</a>ms.DialogResult.OK)<br/>            {<br/>                textBox_save<a href="http://www.php.cn/wiki/1275.html" target="_blank">Dir</a>.Text = fbd.FileName;<br/>                try<br/>                {<br/>                    FileStream fs = new FileStream(fbd.FileName, FileMode.Open, FileAccess.Read);<br/>                    StreamReader sr = new StreamReader(fs);<br/>                    <a href="http://www.php.cn/wiki/121.html" target="_blank">while</a> (!sr.EndOfStream)<br/>                    {<br/>                        <a href="http://www.php.cn/wiki/57.html" target="_blank">string</a> line = sr.<a href="http://www.php.cn/wiki/691.html" target="_blank">ReadLine</a>();<br/>                        analyse(line);<br/>                    }<br/>                }<br/>                catch (<a href="http://www.php.cn/wiki/265.html" target="_blank">Exception</a> ex)<br/>                {<br/>                    MessageBox.Show("错误:" + ex.Message + "\r\n堆栈:" + ex.StackTrace);<br/>                }<br/>            }<br/>        }<br/></p>

표현식 줄 분석:

        private void analyse(string line)
        {
            //以分号作为结束符,支持一行内写多个语句
            string[] expA = line.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < expA.Length; i++)
            {
                analyseExpA(expA[i]);
            }
        }

표현식 평가:

        private void analyseExpA(string expA)
        {
            string[] expB = expA.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < expB.Length; i++ )
            {
                Regex reg = new Regex("[a-zA-Z]");
                if (!reg.IsMatch(expB[i]))
                {
                    object obj = EvalExpress(expB[i]);
                    if (obj != null)
                    {
                        textBox1.Text += expA + " = " + obj.ToString() + "\r\n";
                    }
                    else
                    {
                        textBox1.Text += expA + ",无法识别的表达式\r\n";
                    }
                }
            }
        }

위 내용은 C# 수학 연산 표현식 인터프리터의 샘플 코드에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.