コード例 #1
0
        /// <summary>
        /// 组成212协议
        /// </summary>
        /// <param name="config"></param>
        /// <param name="code"></param>
        /// <param name="cp"></param>
        /// <param name="qn"></param>
        /// <returns></returns>
        private static string MakeContent(HJ212Config config, MiddleCode code, string cp, string qn)
        {
            string rdata      = string.Format("QN={0};ST={1};CN={2};PW={3};MN={4};Flag={5};CP=&&{6}&&", qn, config.ST, (int)code, config.PW, config.MN, config.Flag, cp);
            string dataLength = Util.GetDataLenght(rdata);
            string crc        = Util.GetHj212Crc16(rdata);

            return(string.Format("##{0}{1}{2}\r\n", dataLength, rdata, crc));
        }
コード例 #2
0
        private async void Semantic_Click(object sender, RoutedEventArgs e)
        {
            Progress.Visibility = Visibility.Visible;
            var result = await Task.Run(() => {
                return(SemanticAnalysis());
            });

            Progress.Visibility = Visibility.Collapsed;
            if (result == true)
            {
                ModernDialog modernDialog = new ModernDialog
                {
                    Title   = "生成中间代码成功!",
                    Content = "查看结果?"
                };
                modernDialog.Buttons = new Button[] { modernDialog.OkButton, modernDialog.CancelButton };
                modernDialog.ShowDialog();
                result = modernDialog.MessageBoxResult.ToString();
                if (result == "OK")
                {
                    AnalysisTable page = new AnalysisTable();
                    page.Show();
                    MiddleCode page2 = new MiddleCode();
                    page2.Show();
                }
                else
                {
                    Mips.IsEnabled = true;
                }
            }
            else
            {
                ModernDialog modernDialog = new ModernDialog
                {
                    Title   = "语义分析失败!",
                    Content = "请检查代码合法性!"
                };
                modernDialog.ShowDialog();
            }
        }
コード例 #3
0
        private async void Semantic_Click(object sender, RoutedEventArgs e)
        {
            Progress.Visibility = Visibility.Visible;
            var result = await Task.Run(() => {
                return(SemanticAnalysis());
            });

            Progress.Visibility = Visibility.Collapsed;
            if (result)
            {
                Mips.IsEnabled = true;
                ContentDialog dialog = new ContentDialog();
                dialog.XamlRoot            = this.Content.XamlRoot;
                dialog.Title               = "生成中间代码成功";
                dialog.PrimaryButtonText   = "是";
                dialog.SecondaryButtonText = "否";
                dialog.DefaultButton       = ContentDialogButton.Primary;
                dialog.Content             = new ContentDialogContent();
                var choice = await dialog.ShowAsync();

                if (choice == ContentDialogResult.Primary)
                {
                    MiddleCode page_1 = new MiddleCode();
                    page_1.Activate();
                    AnalysisTable page_2 = new AnalysisTable();
                    page_2.Activate();
                }
            }
            else
            {
                ContentDialog dialog = new ContentDialog();
                dialog.XamlRoot          = this.Content.XamlRoot;
                dialog.Title             = "语义分析子程序执行失败";
                dialog.PrimaryButtonText = "确定";
                await dialog.ShowAsync();
            }
        }
コード例 #4
0
ファイル: Util.cs プロジェクト: mutoushirana/HJ212Virtual
        /// <summary>
        /// 获取命令类型
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public static CommandType GetCommandType(MiddleCode code)
        {
            switch (code)
            {
            //设置超时时间及重发次数
            case MiddleCode.SetTimeOutReSendTimes:
                return(CommandType.Request);

            //提取现场机时间
            case MiddleCode.GetSceneDeviceTime:
                return(CommandType.Request);

            //设置现场机时间
            case MiddleCode.SetSceneDeviceTime:
                return(CommandType.Request);

            //现场机时间校准请求
            case MiddleCode.SceneDeviceTimeCalibration:
                return(CommandType.Notice);

            //提取实时数据间隔
            case MiddleCode.GetRtdDataInterval:
                return(CommandType.Request);

            //设置实时数据间隔
            case MiddleCode.SetRtdDataInterval:
                return(CommandType.Request);

            //提取分钟数据间隔
            case MiddleCode.GetMinuteDataInterval:
                return(CommandType.Request);

            //设置分钟数据间隔
            case MiddleCode.SetMinuteDataInterval:
                return(CommandType.Request);

            //用于设置现场机的密码
            case MiddleCode.SetSceneDevicePassword:
                return(CommandType.Request);

            //取污染物实时数据
            case MiddleCode.GetRtdData:
                return(CommandType.Request);

            //停止察看污染物实时数据
            case MiddleCode.StopRtdData:
                return(CommandType.Notice);

            //取设备运行状态数据
            case MiddleCode.GetDeviceRunState:
                return(CommandType.Request);


            //停止察看设备运行状态
            case MiddleCode.StopDeviceRunState:
                return(CommandType.Request);

            //取污染物日历史数据
            case MiddleCode.GetDayData:
                return(CommandType.Request);

            //取设备运行时间日历史数据
            case MiddleCode.GetDeviceRunTimeDayData:
                return(CommandType.Request);

            //取污染物分钟数据
            case MiddleCode.GetMinuteData:
                return(CommandType.Request);

            //取污染物小时数据
            case MiddleCode.GetHourData:
                return(CommandType.Request);

            //上传数采仪开机时间
            case MiddleCode.UploadComputerPowerOnTime:
                return(CommandType.Upload);

            //零点校准量程校准
            case MiddleCode.RangeCalibration:
                return(CommandType.Request);

            //即时采样
            case MiddleCode.TakeSampleImmediately:
                return(CommandType.Request);

            //启动清洗/反吹
            case MiddleCode.StartClear:
                return(CommandType.Request);

            //比对采样
            case MiddleCode.CompareSample:
                return(CommandType.Request);

            //超标留样
            case MiddleCode.LeaveSuperstandardSample:
                return(CommandType.Request);

            //设置采样时间周期
            case MiddleCode.SetSampleTimeInterval:
                return(CommandType.Request);

            //提取采样时间周期
            case MiddleCode.GetSampleTimeInterval:
                return(CommandType.Request);

            //提取出样时间
            case MiddleCode.GetSampleTime:
                return(CommandType.Request);

            //提取设备唯一标识
            case MiddleCode.GetSceneDeviceUUID:
                return(CommandType.Request);

            //提取现场机信息
            case MiddleCode.GetSceneDeviceInfo:
                return(CommandType.Request);

            //设置现场机参数
            case MiddleCode.SetSceneDeviceParam:
                return(CommandType.Request);

            //取污染物周期数据
            case MiddleCode.GetCycleData:
                return(CommandType.Request);

            //请求应答
            case MiddleCode.RequestResponse:
                return(CommandType.Other);

            //执行结果
            case MiddleCode.ExecuteResponse:
                return(CommandType.Other);

            //通知应答
            case MiddleCode.NoticeResponse:
                return(CommandType.Other);

            //数据应答
            case MiddleCode.DataResponse:
                return(CommandType.Other);

            //心跳
            case MiddleCode.HeartBeat:
                return(CommandType.Other);

            default:
                return(CommandType.None);
            }
        }
コード例 #5
0
 /// <summary>
 /// 开始执行
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void executeToolStripMenuItem_Click(object sender, EventArgs e)
 {
     ClearText();
     //输入内容不为空
     if (!inputRichTextBox.Text.Equals(""))
     {
         AddInformation("开始进行词法分析...");
         //先进行词法分析
         lexicalRichTextBox.Clear();
         errorListView.Items.Clear();
         string       content = inputRichTextBox.Text;
         TokenBuilder tb      = new TokenBuilder(content);
         while (tb.hasMoreLines())
         {
             lexicalRichTextBox.AppendText(tb.getCurrenLineNumber() + ": "
                                           + tb.getCurrentLine() + "\n");
             foreach (Token t in tb.nextTokens())
             {
                 if (t.GetTokenType() != TokenType.ANNOTATION)
                 {
                     lexicalRichTextBox.AppendText("\t" + t.ToString() + "\n");
                 }
             }
         }
         AddInformation("词法分析结束...");
         //存在词法分析错误
         if (tb.hasLexicalError())
         {
             AddInformation("存在词法错误等待修改...");
             MessageBox.Show("程序存在错误, 请先检查", "Interpreter",
                             MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
             List <Error> errors = tb.Errors;
             for (int i = 0; i < errors.Count; i++)
             {
                 Error        error = errors[i];
                 ListViewItem item  = new ListViewItem(new String[] { error.Dec, error.LineNo + "", i + 1 + "" });
                 errorListView.Items.Add(item);
             }
         }
         //词法分析不存在错误进行语法分析
         else
         {
             AddInformation("开始进行语法分析...");
             //grammarRichTextBox.Clear();
             GrammerAnalyzer ga   = new GrammerAnalyzer(content);
             Node            tree = ga.Analyze();
             PrintNode(tree, "");
             AddInformation("语法分析结束...");
             if (ga.HasGrammarError())
             {
                 AddInformation("存在语法错误等待修改...");
                 MessageBox.Show("程序存在错误, 请先检查", "Interpreter",
                                 MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                 List <Error> errors = ga.Errors;
                 for (int i = 0; i < errors.Count; i++)
                 {
                     Error        error = errors[i];
                     ListViewItem item  = new ListViewItem(new String[] { error.Dec, error.LineNo + "", i + 1 + "" });
                     errorListView.Items.Add(item);
                 }
             }
             //当语法分析不存在错误时进行解释执行
             else
             {
                 AddInformation("开始解释执行...");
                 intermediateTabPage.Focus();
                 intermediateTabPage.Show();
                 String result = "";
                 intermediateRichTextBox.Clear();
                 AddInformation("中间代码生成中...");
                 List <TempCode> TreeNode = new MiddleCode(content).getMiddleCode();
                 AddInformation("执行...");
                 new Execute(content).Run();
                 for (int i = 0; i < TreeNode.Count; ++i)
                 {
                     result += "(" + TreeNode[i].fc.op + "," + TreeNode[i].fc.arg1 + "," + TreeNode[i].fc.arg2 + ","
                               + TreeNode[i].fc.result + ")" + "\n";
                 }
                 //List<Table> list = new MiddleCode(content).getTable();
                 //for (int i = 0; i < list.Count; ++i)
                 //{
                 //    result += list[i].str + "," + list[i].value + "," + list[i].type + "\n";
                 //}
                 intermediateRichTextBox.Text = result;
             }
             AddInformation("执行完毕...");
         }
     }
     //输入程序为空
     else
     {
         MessageBox.Show("程序存在错误, 请先检查", "Interpreter",
                         MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
     }
     inputRichTextBox.Focus();
 }