Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 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 == 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();
            }
        }
Ejemplo n.º 4
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();
            }
        }
Ejemplo n.º 5
0
 /// <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;
 }
Ejemplo n.º 6
0
        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));
        }