/// <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)); }
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(); } }
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(); } }
/// <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); } }
/// <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(); }