当前位置: 首页 > Web前端 > JavaScript

揭秘你数据处理的“底层逻辑”,详解公式引擎的计算(一)

时间:2023-03-27 18:26:53 JavaScript

背景信息时代,我们最能明显感受到的就是密集数据的爆炸,数据的积累被人越来越多。这些复杂的数据一起出现,很多传统上使用的数据记录、查询、汇总工具已经不能满足人们的需求。更有效地处理这些大量的数据,使计算机能够理解人类所需要的数据效果,从而形成更加自动化和智能化的数据处理方式。为了处理这些海量数据,各种大数据引擎、搜索引擎、计算引擎、3D引擎等应运而生,以更好地解决由于数据庞大复杂而无法由人类处理的问题。作为一个比较基础的计算公式引擎,是计算程序中负责处理数据的核心部分。接下来介绍计算引擎的基本原理、计算链和异步函数的组成。我们将从计算公式引擎的基本概念出发,以我们的表格电子元件为例,来演示如何用JavaScript实现这些内容。公式引擎的计算原理计算引擎负责解决数据源的统计、数据操作、数据管理,并根据需要返回合适的计算结果。不同的数据处理目的,需要返回的内容不同,对应的类别也很多。为了让计算机更好地识别我们所需要的处理操作,我们需要经过编译的过程,将我们编写的语言翻译成机器可以识别的语言。整个编译阶段的流程按照流程划分如下图:两个关键环节分别是词法分析和句法分析的流程。在这两部分中,我们的输入会逐渐拆分,转化为可以识别内容的程序。输入内容后,编译器首先对内容进行词法分析。在这一步中,编译器的任务是识别源程序中的语句是否有误。实现该功能的编译程序部分一般称为词法分析器。通常词法分析的输出是单个单词符号。以JS为例,这个过程主要分为三个部分:解析函数参数、解析变量声明、解析函数声明。语法分析阶段的目的是识别源程序的语法结构(即语句或句子)是否有错,这个阶段通常可以发现语法错误。在此阶段,编译器实际处理来自词法分析的词标记。在计算公式引擎中,我们处理数据的方式与编译原理中处理语言的过程非常相似。从实际应用出发,我们可以实现一个类似Excel计算公式的计算公式引擎。我们可以采用的思路是从词法分析入手。将完整的一长串公式语句拆分成小块,然后进行语法分析,最后对生成的语法结构树进行运算。接下来我们看看具体是如何实现的。下面将从公式计算入手,讲解公式引擎的实现细节。公式计算是通过公式字符串计算得到表达式结果。例如:计算公式“=1+10*11”,结果为111。计算机不是人。这么简单的一个表达式,如果要计算正确,最终成为我们需要的数据内容,那可不是简单的一眼就能知道答案的。实现这样的Excel表格计算功能,需要经过词法分析、语法分析、语法结构树计算等几个过程。1.词法分析用and中常用的公式来解释。首先,我们进行词法分析。在这个过程中,我们将公式字符拆分为字符串数组。在Excel表格的公式计算中,表达式的公式字符串只包括:运算符、符号、字符串、数字、数组、引用、命名这几类。名称:sum运算符:():/%+参考:A1A11B1编号:1002语法分析词法分析完成后,我们进一步解析词法分析的结果。一般来说,计算中的语法分析可以通过表达式树或堆栈(即反向波兰)来处理。这里先介绍一下表达式树的方法。解析-使用表达式树解析表达式树的过程,从二叉树开始。首先,我们将词法分析的结果按照优先级组织成一棵表达式树。表达式树的叶子节点是操作数,内部节点是运算符。在这种情况下,冒号具有最高优先级,其次是括号,最后是除号。当这棵树形成时,我们就非常接近于得到最终的计算结果了。我们将使用递归调用的方式对这棵树进行操作,从根节点开始,求和,递归向下。到了A1:A11,我们就有了第一个结果,然后逐层返回计算结果。这充分展示了如何实现公式计算。语法分析——逆波兰算法逆波兰算法在语法分析阶段形成一个栈(逆波兰表达式)。该表达式的核心是将我们使用的普通中缀表达式转换为后缀表达式。括号只是表示计算时的运算顺序,并不是实际参与计算的元素内容。所以在中缀转后缀的过程中可以省略括号中的内容,然后由计算机编写代码完成计算。这里显示了一棵树转换成相应的反向波兰外观。二叉树递归VS逆波兰算法与树递归计算相比,逆波兰算法更符合数学计算的习惯。