public Task <AnalysisTable> GetAnalysisTableAsync(double[] xs, double[] ys, string[,] ns, double a) { if (ns.Length == 0) { return(Task.FromException <AnalysisTable>(new ArgumentNullException())); } if (a <= 0) { return(Task.FromException <AnalysisTable>(new ArithmeticException())); } var nsDouble = Utils.StringToNumber(ns); var s = new AnalysisTable(xs, ys, nsDouble, a); return(Task.FromResult(s)); }
public Task <AnalysisTable> GetAnalysisTableAsync(string xs, string ys, string[,] ns, double a) { if (string.IsNullOrEmpty(xs) || string.IsNullOrEmpty(ys) || ns.Length == 0) { return(Task.FromException <AnalysisTable>(new ArgumentNullException())); } if (a <= 0) { return(Task.FromException <AnalysisTable>(new ArithmeticException())); } var nsDouble = Utils.StringToNumber(ns); var x = Utils.StringToNumber(xs); var y = Utils.StringToNumber(ys); var s = new AnalysisTable(x, y, nsDouble, a); return(Task.FromResult(s)); }
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> /// Initializes a new instance of the <see cref="AnalysisTableResultColumn"/> class. /// </summary> /// <param name="table">Analysis table</param> public AnalysisTableResultColumn(AnalysisTable table) { this.AnalysisTable = table; }
private AnalysisFunctionFormulaParseResult ParseVariable(AnalysisParserString parserString) { if (!parserString.CurrentString.StartsWith("$")) { return(new AnalysisFunctionFormulaParseResult("invalid function token")); } parserString.SkipChar(); bool isTextFunction = false; if (parserString.NextCharacter() == '!') { isTextFunction = true; parserString.SkipChar(); } string functionName = parserString.NextWord(); parserString.SkipBlanks(); if (!isTextFunction) { AnalysisFunction func = AnalysisFunction.FunctionWithName(functionName); if (func != null) { if (parserString.NextCharacter() == '(') { parserString.SkipCharWithBlanks(); AnalysisFunctionFormulaParseResult parseResult = this.Parse(parserString); if (parseResult.Result != null) { AnalysisFunctionFunc f = new AnalysisFunctionFunc(func, parseResult.Result, this.Analysis); if (parserString.NextCharacter() == ')') { parserString.SkipCharWithBlanks(); return(new AnalysisFunctionFormulaParseResult(f)); } else { return(new AnalysisFunctionFormulaParseResult("invalid function end")); } } } } } string indexPart0 = parserString.IndexString(); string indexPart1 = null; if (indexPart0 != null) { indexPart1 = parserString.IndexString(); } int occurrence = 0; if (indexPart1?.Length > 0) { occurrence = indexPart0.ToInt(); indexPart0 = indexPart1; } bool record = false; int fieldNumber = -1; if (indexPart0 != null) { if (indexPart0 == "r") { record = true; } fieldNumber = indexPart0.ToInt(); } else { record = true; } AnalysisTable table = this.Analysis.TableWithInfoAreaIdOccurrence(functionName, occurrence); if (table == null) { return(new AnalysisFunctionFormulaParseResult($"unknown table {functionName}/{occurrence}")); } if (record) { AnalysisFunctionInfoAreaField f = new AnalysisFunctionInfoAreaField(table.CountField(), this.Analysis); return(new AnalysisFunctionFormulaParseResult(f)); } AnalysisSourceField sourceField = table.FieldWithIndex(fieldNumber); if (sourceField == null) { return(new AnalysisFunctionFormulaParseResult($"unknown field {functionName}/{occurrence}.{fieldNumber}")); } AnalysisFunctionSimpleField functionField; if (isTextFunction) { functionField = new AnalysisFunctionSimpleTextField(sourceField, this.Analysis); } else { functionField = new AnalysisFunctionSimpleNumberField(sourceField, this.Analysis); } return(new AnalysisFunctionFormulaParseResult(functionField)); }