CN118113302A - 一种树状中间表示生成方法、系统、设备、介质、产品 - Google Patents
一种树状中间表示生成方法、系统、设备、介质、产品 Download PDFInfo
- Publication number
- CN118113302A CN118113302A CN202410534329.XA CN202410534329A CN118113302A CN 118113302 A CN118113302 A CN 118113302A CN 202410534329 A CN202410534329 A CN 202410534329A CN 118113302 A CN118113302 A CN 118113302A
- Authority
- CN
- China
- Prior art keywords
- lexical
- grammar
- rule
- current
- tree
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 121
- 230000008569 process Effects 0.000 claims abstract description 60
- 230000006870 function Effects 0.000 claims abstract description 49
- 238000004590 computer program Methods 0.000 claims description 23
- 230000014509 gene expression Effects 0.000 claims description 21
- 238000012545 processing Methods 0.000 claims description 14
- 238000006243 chemical reaction Methods 0.000 claims description 5
- 238000013135 deep learning Methods 0.000 abstract description 12
- 238000004458 analytical method Methods 0.000 description 14
- 238000004891 communication Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 8
- 230000009471 action Effects 0.000 description 7
- 238000011161 development Methods 0.000 description 5
- 239000011800 void material Substances 0.000 description 5
- 101100491335 Caenorhabditis elegans mat-2 gene Proteins 0.000 description 4
- 102100040428 Chitobiosyldiphosphodolichol beta-mannosyltransferase Human genes 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 238000010276 construction Methods 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 101000891557 Homo sapiens Chitobiosyldiphosphodolichol beta-mannosyltransferase Proteins 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000010367 cloning Methods 0.000 description 1
- 239000000306 component Substances 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000007373 indentation Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Machine Translation (AREA)
Abstract
本发明公开了一种树状中间表示生成方法、系统、设备、介质、产品,涉及深度学习领域,为解决树状中间表示获取过程中手写代码不适配深度学习算子基础化场景的问题,该树状中间表示生成方法包括接收用户编写的算子描述文本;基于当前词法规则创建词法分析器,调用词法分析器对算子描述文本进行切分得到多个词法单元;基于当前语法规则创建语法分析器,调用语法分析器对多个词法单元和当前语法规则进行匹配,基于与当前语法规则匹配的词法单元创建与当前语法规则对应的节点构造;根据所有节点构造生成语法树,将语法树转换为树状中间表示。本发明能够高效解析算子公式,提高了整体性能,便于扩展系统的功能,在深度学习算子基础化方面具有显著优势。
Description
技术领域
本发明涉及深度学习领域,特别涉及一种树状中间表示生成方法、系统、设备、介质、产品。
背景技术
在深度学习框架中,算子(operator)是执行特定计算任务的基本单元。为了简化开发过程,算子基础化技术应运而生,它允许通过组合更基础的算子来实现复杂的计算任务,由于开发者仅需定义算子的数学公式,而无需编写底层的实现细节,显著减少了代码开发的工作量。
用户首先会将算子的数学公式写入一个配置文件,配置文件中的数学公式是以人类可读的高级语言编写的,为了让计算机能够理解和执行这些数学公式,需要将它们转换为计算机能够理解的格式,因此,将数据公式转换为TreeIR(Tree IntermediateRepresentation,树状中间表示)成为了一个高效的选择,树状中间表示能够将复杂的数学公式转化为一种结构化的树形结构,使得计算机能够按照树的结构进行逐步计算,从而高效地执行复杂的运算。
目前常用的方式是程序员人工解析数学公式,通过手写代码的方式将数学公式构造成一个树状结构,一方面需要程序员深入了解数学公式的结合性、优先级等内容,并手写出代码实现,耗时且复杂,另一方面,在有新的需求导入时,需要在大量的代码中寻找修改点,效率不高,难以维护和更新,不适用于需要适配大量的自定义算子名称和函数名称的深度学习算子基础化场景。
因此,如何提供一种解决上述技术问题的方案是本领域技术人员目前需要解决的问题。
发明内容
本发明的目的是提供一种树状中间表示生成方法、系统、设备、介质、产品,能够高效解析算子公式,提高了整体性能,便于扩展系统的功能,在深度学习算子基础化方面具有显著优势。
为解决上述技术问题,本发明提供了一种树状中间表示生成方法,包括:
接收用户编写的算子描述文本;
基于当前词法规则创建词法分析器,调用所述词法分析器对所述算子描述文本进行切分得到多个词法单元;
基于当前语法规则创建语法分析器,调用所述语法分析器对多个所述词法单元和所述当前语法规则进行匹配,基于与所述当前语法规则匹配的词法单元创建与所述当前语法规则对应的节点构造,所述节点构造包括至少一个节点,所述节点与所述词法单元一一对应;
根据所有所述节点构造生成语法树,将所述语法树转换为树状中间表示。
其中,基于当前词法规则创建词法分析器的过程包括:
获取预定义的所述当前词法规则;
基于所述当前词法规则生成词法分析器的头文件和源文件;
利用所述词法分析器的头文件和源文件创建词法分析器。
其中,所述当前词法规则包括与识别关键字对应的第一词法规则、与识别操作符对应的第二词法规则、与识别函数名对应的第三词法规则、与识别标识符对应的第四词法规则、与识别分隔符对应的第五词法规则中的至少一项。
其中,调用所述词法分析器对所述算子描述文本进行切分得到多个词法单元的过程包括:
调用所述词法分析器对所述算子描述文本中各个类型的子文本进行识别;所述类型包括所述关键字、所述操作符、所述函数名、所述标识符和所述分隔符中的至少一项;
每识别到一个与任一所述类型匹配的子文本,基于所述子文本及其匹配的类型得到一个词法单元。
其中,获取预定义的所述当前词法规则的过程包括:
获取基于正则表达式预定义的所述当前词法规则;
或,
获取基于目标描述性语言预定义的所述当前词法规则。
其中,获取预定义的所述当前词法规则的过程包括:
从第一预设位置读取第一用户配置文件;
从所述第一用户配置文件中读取所述预定义的所述当前词法规则。
其中,基于所述当前词法规则创建词法分析器,调用所述词法分析器对所述算子描述文本进行切分得到多个词法单元之后,调用所述语法分析器对多个所述词法单元和所述当前语法规则进行匹配之前,所述树状中间表示生成方法还包括;
基于多个所述词法单元组成词法序列;
调用所述语法分析器对多个所述词法单元和所述当前语法规则进行匹配的过程包括:
调用所述语法分析器将所述词法序列与至少一条所述当前词法规则进行匹配。
其中,基于当前语法规则创建语法分析器的过程包括:
获取预定义的所述当前语法规则;
基于所述当前语法规则生成语法分析器的头文件和源文件;
利用所述语法分析器的头文件和源文件创建语法分析器。
其中,基于所述当前语法规则生成语法分析器的头文件和源文件的过程包括:
将所述当前语法规则转换为由键值对组成的内部数据结构;
基于所述当前语法规则构建至少一个解析表;所述解析表用于指导所述语法分析器在匹配过程中的决策;
利用所述解析表和所述内部数据结构生成所述语法分析器的头文件和源文件。
其中,所述当前语法规则包括与识别标识符、操作符和常量对应的第一语法规则、与识别赋值语句对应的第二语法规则、与识别表达式对应的第三语法规则、与识别函数调用对应的第四语法规则中的至少一条。
其中,调用所述语法分析器对多个所述词法单元和所述当前语法规则进行匹配的过程包括:
调用所述语法分析器对多个所述词法单元分别与所述第一语法规则和/或所述第二语法规则和/或所述第三语法规则和/或所述第四语法规则进行匹配;
基于与所述当前语法规则匹配的词法单元创建与所述当前语法规则对应的节点构造的过程包括:
若多个所述词法单元中存在与所述第一语法规则匹配的至少一个第一词法单元,将至少一个所述第一词法单元创建为所述第一语法规则对应的节点构造;
若多个所述词法单元中存在与所述第二语法规则匹配的至少一个第二词法单元,将至少一个所述第二词法单元创建为所述第二语法规则对应的节点构造;
若多个所述词法单元中存在与所述第三语法规则匹配的至少一个第三词法单元,将至少一个所述第三词法单元创建为所述第三语法规则对应的节点构造;
若多个所述词法单元中存在与所述第四语法规则匹配的至少一个第四词法单元,将至少一个所述第四词法单元创建为所述第四语法规则对应的节点构造。
其中,调用所述语法分析器对多个所述词法单元和所述当前语法规则进行匹配之后,所述树状中间表示生成方法还包括:
若多个所述词法单元与任一所述当前语法规则均不匹配,生成语法错误报告。
其中,获取预定义的所述当前语法规则的过程包括:
从第二预设位置读取第二用户配置文件;
从所述第二用户配置文件中读取所述预定义的所述当前语法规则。
其中,所述树状中间表示生成方法还包括:
创建驱动构造器;
当识别到与所述当前语法规则匹配的至少一个所述词法单元时,通过所述驱动构造器对与所述当前语法规则匹配的至少一个所述词法单元进行节点类型判断操作,并基于所述节点类型判断操作的判断结果进行名称转换操作得到与所述当前语法规则匹配的至少一个所述词法单元对应的节点名称;
基于与所述当前语法规则匹配的词法单元创建与所述当前语法规则对应的节点构造的过程包括:
基于与所述当前语法规则匹配的至少一个所述词法单元对应的节点名称创建与所述当前语法规则对应的节点构造。
其中,创建驱动构造器之后,所述树状中间表示生成方法还包括:
获取所述语法树的根节点指针、节点的深度以及布尔值;
基于所述根节点指针、所述节点的深度和所述布尔值输出所述算子描述文本对应的图形化树状结构。
其中,基于所述根节点指针、所述节点的深度和所述布尔值输出所述算子描述文本对应的图形化树状结构的过程包括:
基于所述根节点指针遍历所述语法树的每一所述节点;
基于遍历到的当前节点的深度以及所述当前节点对应的所述布尔值进行缩进和连线,得到图形化树状结构。
为解决上述技术问题,本发明还提供了一种树状中间表示生成系统,包括:
接收模块,用于接收用户编写的算子描述文本;
第一处理模块,用于基于当前词法规则创建词法分析器,调用所述词法分析器对所述算子描述文本进行切分得到多个词法单元;
第二处理模块,用于基于当前语法规则创建语法分析器,调用所述语法分析器对多个所述词法单元和所述当前语法规则进行匹配,基于与所述当前语法规则匹配的词法单元创建与所述当前语法规则对应的节点构造,所述节点构造包括至少一个节点,所述节点与所述词法单元一一对应;
第三处理模块,用于根据所有所述节点构造生成语法树,将所述语法树转换为树状中间表示。
为解决上述技术问题,本发明还提供了一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上文任意一项所述的树状中间表示生成方法的步骤。
为解决上述技术问题,本发明还提供了一种非易失性存储介质,所述非易失性存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上文任意一项所述的树状中间表示生成方法的步骤。
为解决上述技术问题,本发明还提供了一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现上文任意一项所述树状中间表示生成方法的步骤。
本发明提供了一种树状中间表示生成方法,算子描述文本可以由用户自定义编写,提高了灵活性,基于当前词法规则创建词法分析器,基于当前语法规则创建语法分析器,依次调用词法分析器和语法分析器对算子描述文本进行解析,得到用于生成语法树的节点构造,节点构造与语法规则相对应,提高了树状结构的准确性,再将语法树转换为树状中间表示,利用预设的词法规则和语法规则可以快速、准确的解析算子公式,减少了解析时间,当规则改变时,也无需开发人员对词法分析器和语法分析器的代码进行人工编写,提高了整体性能,便于扩展系统的功能,在深度学习框架的算子基础化方面具有显著优势。本发明还提供了一种树状中间表示生成系统、电子设备、非易失性存储介质和计算机程序产品,具有和上述树状中间表示生成方法相同的有益效果。
附图说明
为了更清楚地说明本发明实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明所提供的一种树状中间表示生成方法的步骤流程图;
图2为本发明所提供的一种节点构造的示意图;
图3为本发明所提供的一种树状数据结构示意图;
图4为本发明所提供的一种树状中间表示生成装置的结构示意图;
图5为本发明所提供的一种树状中间表示生成系统的结构示意图;
图6为本发明所提供的一种电子设备的结构示意图;
图7为本发明所提供的一种非易失性存储介质的结构示意图。
具体实施方式
本发明的核心是提供一种树状中间表示生成方法、系统、设备、介质、产品,能够高效解析算子公式,提高了整体性能,便于扩展系统的功能,在深度学习算子基础化方面具有显著优势。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
第一方面,请参照图1,图1为本发明所提供的一种树状中间表示生成方法的步骤流程图,该树状中间表示生成方法包括:
S101:接收用户编写的算子描述文本;
可以理解,本实施例的目的是将用户编写的算子描述文本转换为树状数据结构的计算机程序表达式,也即树状中间表示。本实施例中的算子描述文本可以是用户以自定义、非标准化的格式编写的算子组合公式文本,用户可以根据其特定的需求或偏好来定义公式格式,提高了系统的灵活性。
S102:基于当前词法规则创建词法分析器,调用词法分析器对算子描述文本进行切分得到多个词法单元;
本实施例中,词法规则可以根据实际应用场景进行调整,当前词法规则即当前采用的词法规则,基于当前词法规则创建词法分析器,在词法规则变化后,自动生成新的词法分析器,无需开发人员手动编写词法分析器的代码,也即在词法规则更新后,无需开发人员在大量的代码中寻找修改点,提高了效率。
在接收到算子描述文本后,调用词法分析器对算子描述文本进行切分得到多个词法单元(token),具体的,调用词法分析器对算子描述文本中每一个子文本进行识别,并根据识别结果进行词法单元的划分。
示例性地,假设算子描述文本为如下:
;
上述算子描述文本的具体含义说明如下:
输出:output;
输入:beta,input,alpha,mat1,mat2,trans_mat1,trans_mat2;
操作符:(乘法),+(加法),MatMul(矩阵乘法);
计算流程:
首先,计算beta乘以input的结果;
然后,计算alpha乘以MatMul(mat1,mat2,trans_mat1,trans_mat2)的结果;
最后,将上面两个结果相加,并将结果赋值给output。
则对该算子描述文本进行切分后,output作为一个词法单元、=作为一个词法单元,beta作为一个词法单元,作为一个词法单元,以此类推,trans_mat2作为一个词法单元。
S103:基于当前语法规则创建语法分析器,调用语法分析器对多个词法单元和当前语法规则进行匹配,基于与当前语法规则匹配的词法单元创建与当前语法规则对应的节点构造,节点构造包括至少一个节点,节点与词法单元一一对应;
本实施例中,语法规则可以根据实际应用场景进行调整,当前语法规则即当前采用的语法规则,基于当前语法规则创建词法分析器,在语法规则变化后,自动生成新的语法分析器,无需开发人员手动编写语法分析器的代码,也即在语法规则更新后,无需开发人员在大量的代码中寻找修改点,提高了效率。
当词法分析器对算子描述文本进行切分得到多个token后,调用语法分析器,语法分析器的功能是按照预定义的语法规则,根据输入的token流进行语法匹配,然后根据匹配到的具体语法执行预定义的动作。如将多个token组成有意义的表达式和语句,从而生成对应的节点构造,一个节点构造中包括至少一个节点,当节点构造包括多个节点时,多个节点中包括一个父节点,及与父节点存在连接关系的子节点。
可以理解,词法分析是一种线性分析,而语法分析是一种层次结构分析,例如a=b+c,代表一个赋值语句,而其中b+c代表一个表达式,语法分析器用于识别a+b为表达式,同时,识别上述整个符号串(a=b+c)属于赋值语句这个范畴,基于a、+、b以及算数表达式对应的语法规则建立的节点构造如图2所示,其中,+对应为父节点,a和b为子节点。
S104:根据所有节点构造生成语法树,将语法树转换为树状中间表示。
由于一段token序列中的多个token可能符合多个语法规则,每匹配到一次符合该语法规则的token,则基于token及其匹配的语法规则创建一个节点构造,基于所有节点构造生成语法树,假设算子描述文本为如下:
;
该算子描述文本对应语法树的结构参照图3所示,图3中以α表示alpha,β表示beta,i0表示input,M表示MatMul,m1表示mat1,m2表示mat2,tm1表示trans_mat1,tm2表示trans_mat2。
具体的,语法分析器根据语法规则,将token序列转换成一颗语法树(Tree)。语法树的每个节点都对应着语法规则中的一个构造(如赋值语句、表达式、项等),而节点的子节点则对应着构成这个构造的token。
可以理解,在计算机程序中,树状数据结构可以通过结构体链表实现,如下是树节点的代码示例:
可以理解,树状中间表示保留了语法树的结构,进行了一些优化或转换,得到可以被系统进一步处理的数据结构,例如用于深度学习框架下的计算、优化或执行Addmm算子的操作。
可见,本实施例中,算子描述文本可以由用户自定义编写,提高了灵活性,基于当前词法规则创建词法分析器,基于当前语法规则创建语法分析器,依次调用词法分析器和语法分析器对算子描述文本进行解析,得到用于生成语法树的节点构造,节点构造与语法规则相对应,提高了树状结构的准确性,再将语法树转换为树状中间表示,利用预设的词法规则和语法规则可以快速、准确的解析算子公式,减少了解析时间,当规则改变时,也无需开发人员对词法分析器和语法分析器的代码进行人工编写,提高了整体性能,便于扩展系统的功能,在深度学习框架的算子基础化方面具有显著优势。
在上述实施例的基础上:
作为一种可选的实施例,基于当前词法规则创建词法分析器的过程包括:
获取预定义的当前词法规则;
基于当前词法规则生成词法分析器的头文件和源文件;
利用词法分析器的头文件和源文件创建词法分析器。
本实施例中,首先预定义一套当前词法规则,当前词法规则用于指示如何识别输入本文(算子描述文本)中不同的词法单元(token)。根据预定义的词法规则生成词法分析器的源代码,这个过程涉及但不限于解析当前词法规则、生成状态机、编写代码来识别token的步骤,生成的源代码通常是可执行的、并且可以直接嵌入到其他程序中。本实施例中的源文件为用于保存源代码的文件。源代码是一个可执行的程序或库,实现了根据词法规则切分输入文本为token的功能。
在其他程序中,可以通过调用词法分析器提供的API(Application ProgrammingInterface,应用程序编程接口)来使用它,具体的,创建一个词法分析器实例,并将要分析的算子描述文本传递给这个词法分析器实例,词法分析器会按照定义的词法规则切分文本,并返回token序列。可以理解,本实施例中的词法分析器可以为词法分析器生成器基于当前词法规则生成的。
作为一种可选的实施例,当前词法规则包括与识别关键字对应的第一词法规则、与识别操作符对应的第二词法规则、与识别函数名对应的第三词法规则、与识别标识符对应的第四词法规则、与识别分隔符对应的第五词法规则中的至少一项。
可以理解,当前词法规则通常使用正则表达式或其他描述性语言来定义。例如,对于Addmm算子的公式文本,词法规则包括但不限于:
与识别关键字对应的第一词法规则,其中,第一词法规则包括定义如output,beta,input,alpha等为关键字;
与识别操作符对应的第二词法规则,其中,第二词法规则包括定义如,+,-,(,)等为操作符;
与识别标识符对应的第三词法规则,其中,第三词法规则包括定义匹配以字母或下划线开头,后跟字母、数字或下划线的序列为标识符;
以及与识别函数名对应的第三词法规则、与识别标识符对应的第四词法规则、与识别分隔符对应的第五词法规则,用于匹配空格、制表符和换行符等;
还包括与识别数字对应的词法规则,用于匹配整数和浮点数。
作为一种可选的实施例,调用词法分析器对算子描述文本进行切分得到多个词法单元的过程包括:
调用词法分析器对算子描述文本中各个类型的子文本进行识别;类型包括关键字、操作符、函数名、标识符和分隔符中的至少一项;
每识别到一个与任一类型匹配的子文本,基于子文本及其匹配的类型得到一个词法单元。
本实施例中,词法分析器使用预定义的词法规则来切分输入的算子描述文本。这些词法规则包括识别关键字(如output,beta,input,alpha等)、操作符(如,+,=)、函数名(如MatMul)以及标识符(如mat1,mat2,trans_mat1,trans_mat2)等。同时,词法分析器也会识别空格、换行符等分隔符。根据词法规则,词法分析器将输入的文本切分成一系列的token,每个token都包含了它的类型(如关键字、操作符、标识符等)和值(如/>,+,output等)。词法分析器将生成的token序列传递给语法分析器。
示例性地,假设词法分析器匹配到单个“=”时,识别为一个赋值符号,匹配到两个连续的“=”,即“==”时,识别为一个相等符号。
作为一种可选的实施例,获取预定义的当前词法规则的过程包括:
从第一预设位置读取第一用户配置文件;
从第一用户配置文件中读取预定义的当前词法规则。
本实施例中,将预定义的当前词法规则提供给词法分析器生成器时,可以通过一个配置文件来实现,用于存储当前词法规则的配置文件为第一用户配置文件,词法分析器生成器可以定期的从第一预设位置读取第一用户配置文件,从而获取预定义的当前词法规则,以保证系统能够及时响应规则的变化。当然,除了可以采用配置文件,还可以通过文本文件或其他形式的输入来完成的。
本实施例中的词法分析流程如下:
定义词法规则:创建一个配置有当前词法规则的第一用户配置文件,定义如何识别关键字、操作符、标识符等;
使用词法分析器生成器:运行词法分析器生成器工具,并传递第一用户配置文件作为词法分析器生成器的输入;
生成词法分析器的代码:词法分析器生成器工具输出词法分析器的源代码;
集成到程序中:将生成的源代码集成到需要词法分析功能的程序中;
使用词法分析器:在程序中创建词法分析器实例,调用其API来切分和分析文本;
通过这种方式,词法分析器生成器简化了词法分析器的创建过程,使得开发人员能够专注于定义规则,而不是手动编写词法分析器的代码。
作为一种可选的实施例,基于当前语法规则创建语法分析器的过程包括:
获取预定义的当前语法规则;
基于当前语法规则生成语法分析器的头文件和源文件;
利用语法分析器的头文件和源文件创建语法分析器。
本实施例中,语法分析器接收来自词法分析器的token序列,使用预定义的当前语法规则来解析token序列。当前规则描述了如何将这些token组合成有意义的表达式和语句。对于Addmm算子,语法规则包括如何识别赋值语句、如何组合表达式和项、以及如何处理函数调用等。
根据预定义的当前语法规则,生成语法分析器的源代码,本实施例中源文件为存储源代码的文件,这段源代码可以直接嵌入到其他程序中,或者作为一个独立的库来使用。在其他程序中,可以通过调用语法分析器提供的API来使用它。包括创建一个语法分析器实例,并将要解析的文本传递至语法分析器实例。语法分析器会根据定义的当前语法规则解析文本,并生成一个抽象语法树(Abstract Syntax Tree,AST),以供后续处理(如解释执行、编译优化等)。
本实施例中可以通过语法分析器生成器来生成语法分析器的源代码,在生成源代码之前或之后,语法分析器生成器可能还提供了一些选项来优化生成的语法分析器或定制其行为。这些选项包括但不限于选择不同的算法或策略来生成解析表,启用或禁用某些特性,如错误恢复机制、语法预测等,提供钩子或回调函数,以便在解析过程中执行自定义操作。
作为一种可选的实施例,基于当前语法规则生成语法分析器的头文件和源文件的过程包括:
将当前语法规则转换为由键值对组成的内部数据结构;
基于当前语法规则构建至少一个解析表;解析表用于指导语法分析器在匹配过程中的决策;
利用解析表和内部数据结构生成语法分析器的头文件和源文件。
本实施例中,语法分析器生成器内部执行一系列步骤来解析语法规则,并生成相应的语法分析器的源代码,包括但不限于:
解析语法规则:生成器首先解析输入的语法规则,将其转换成内部数据结构,以便于后续的处理;
构建解析表:基于语法规则,生成器构建一个或多个解析表(如LR(0)项集、解析函数表等),这些表用于指导语法分析器在解析过程中的决策;
生成源代码:使用这些解析表和其他相关数据结构,生成器自动生成语法分析器的源代码。
作为一种可选的实施例,当前语法规则包括与识别标识符、操作符和常量对应的第一语法规则、与识别赋值语句对应的第二语法规则、与识别表达式对应的第三语法规则、与识别函数调用对应的第四语法规则中的至少一条。
本实施例中,需要定义一套语法规则,这些语法规则描述了输入文本(通常是编程语言或领域特定语言的源代码)的结构和格式。语法规则通常使用上下文无关文法(Context-Free Grammars,CFGs)来定义,如BNF(Backus-Naur Form,巴科斯-诺尔范式)、EBNF(Extended Backus-Naur Form,扩展巴科斯-诺尔范式)或其他描述性语言。
例如,对于Addmm算子的公式文本,语法规则包括但不限于与识别标识符、操作符和常量对应的第一语法规则、与识别赋值语句对应的第二语法规则、与识别表达式对应的第三语法规则、与识别函数调用对应的第四语法规则中的至少一条,其中第一语法规则中定义标识符、操作符和常量的识别规则,第二语法规则定义了赋值语句的结构,第三语法规则定义了表达式的结构(包括项的组合和优先级)、第四语法规则定义了函数调用的结构(包括参数列表)。
作为一种可选的实施例,调用语法分析器对多个词法单元和至少一条当前语法规则进行匹配的过程包括:
调用语法分析器对多个词法单元分别与第一语法规则和/或第二语法规则和/或第三语法规则和/或第四语法规则进行匹配;
基于与当前语法规则匹配的词法单元创建与当前语法规则对应的节点构造的过程包括:
若多个词法单元中存在与第一语法规则匹配的至少一个第一词法单元,将至少一个第一词法单元创建为第一语法规则对应的节点构造;
若多个词法单元中存在与第二语法规则匹配的至少一个第二词法单元,将至少一个第二词法单元创建为第二语法规则对应的节点构造;
若多个词法单元中存在与第三语法规则匹配的至少一个第三词法单元,将至少一个第三词法单元创建为第三语法规则对应的节点构造;
若多个词法单元中存在与第四语法规则匹配的至少一个第四词法单元,将至少一个第四词法单元创建为第四语法规则对应的节点构造。
如下是一条语法规则示例:
assign : identifier EQUAL expr {赋值语句,例如a = b + c;
a(identifier),=(EQUAL), b + c (expr)
dosometing ...匹配到该语法需要执行的动作
}
这条语法规则的含义是:在语句中匹配到“标识符==表达式”格式的内容时,将其识别为一条赋值语句。其中标识符、==是token,由词法解析器得到,表达式是按照其它语法规则匹配得到的。在do something部分,可以定义需要执行的动作,例如创建一个新的节点:new TNode。
作为一种可选的实施例,调用语法分析器对多个词法单元和至少一条当前语法规则进行匹配之后,树状中间表示生成方法还包括:
若多个词法单元与任一当前语法规则均不匹配,生成语法错误报告。
本实施例中,如果token序列不符合任何语法规则,语法分析器会报告一个语法错误,同时停止进一步的解析。
作为一种可选的实施例,获取预定义的当前语法规则的过程包括:
从第二预设位置读取第二用户配置文件;
从第二用户配置文件中读取预定义的当前语法规则。
本实施例中,将预定义的当前语法规则提供给语法分析器生成器时,可以通过一个配置文件来实现,用于存储当前语法规则的配置文件为第二用户配置文件,语法分析器生成器可以定期的从第二预设位置读取第二用户配置文件,从而获取预定义的当前语法规则,以保证系统能够及时响应规则的变化。当然,除了可以采用配置文件,还可以通过文本文件或其他形式的输入来完成的。
本实施例中的语法分析流程如下:
定义语法规则:创建一个语法规则文件,定义输入文本的结构和格式;
使用语法分析器生成器:运行语法分析器生成器工具,并传递语法规则文件作为输入;
解析和生成代码:语法分析器生成器解析语法规则,构建解析表,并生成语法分析器的源代码;
集成到程序中:将生成的源代码集成到需要语法分析功能的程序中;
使用语法分析器:在程序中创建语法分析器实例,调用其API来解析输入的文本,并获取解析结果。
通过这种方式,语法分析器生成器简化了语法分析器的创建过程,使得开发人员能够专注于定义语法规则,而不是手动编写复杂的解析代码。
作为一种可选的实施例,树状中间表示生成方法还包括:
创建驱动构造器;
当识别到与当前语法规则匹配的至少一个词法单元时,通过驱动构造器对与当前语法规则匹配的至少一个词法单元进行节点类型判断操作,并基于节点类型判断操作的判断结果进行名称转换操作得到与当前语法规则匹配的至少一个词法单元对应的节点名称;
基于与当前语法规则匹配的词法单元创建与当前语法规则对应的节点构造的过程包括:
基于与当前语法规则匹配的至少一个词法单元对应的节点名称创建与当前语法规则对应的节点构造。
在包括语法规则的配置文件(以下简称语法规则文件)中,驱动构造器充当了一个核心组件,它负责处理与语法解析相关但与具体语法结构描述不直接相关的逻辑,通过集成驱动构造器,能够将复杂的节点类型判断和名称转换逻辑从语法规则文件中提取出来,实现逻辑上的分离和模块化。
驱动构造器提供了一系列函数,如IsInput,IsOutput,GetConvertedInputName,和GetConvertedOutputName,这些函数允许在语法规则文件中进行简洁而高效的操作。例如,当识别到一个标识符时,可以直接调用驱动构造器中的相应函数来判断该标识符是否为输入或输出,并获取相应的转换后的名称。这种方式不仅简化了语法规则文件的内容,还提高了代码的可读性和可维护性。通过驱动构造器的这种封装方式,可以更加专注于定义语言的语法结构,而无需关心具体的实现细节。这使得语法规则文件更加清晰、易于理解,并且降低了维护成本。此外,由于驱动构造器的设计是可扩展的,还可以根据需要在不修改语法规则文件的情况下添加新的功能或优化现有功能。驱动构造器引入使得语法规则文件的处理更加高效、灵活和可维护,是语法分析器设计中的一个重要组成部分。
在语法规则文件中,集成了驱动构造器的API函数,具体而言,在上述语法规则的do something部分,通过调用驱动构造器提供的函数来执行具体的动作,如下是一段示例代码:
identifier : IDENTIFIER {
if (driver.IsInput($1)) {
$$ = new TNode(driver.GetConvertedInputName($1), $1,OperatorType::IN);
} else if (driver.IsOutput($1)) {
$$ = new TNode(driver.GetConvertedOutputName($1), $1,OperatorType::OUT);
} else {
$$ = new TNode($1, $1);
}
}
其中,driver是驱动构造器,示例代码中调用了driver的IsInput,IsOutput,GetConvertedInputName,GetConvertedOutputName函数。IsInput函数用来判断匹配到的标识符是否为输入,IsOutput函数用来判断匹配到的标识符是否为输出,GetConvertedInputName函数用来获取输入节点的名称,GetConvertedOutputName函数用来获取输出节点的名称。
驱动构造器中提供如下这些具体的函数,以用于构造树状中间表示:
int parse(std::istream&in):提供给用户使用的接口,将算子公式文本文件传递给该函数进行TreeIR构造;
std::string GetNodeTempName(:用于为新节点获取一个临时名称;
void StoreMap(TNodenode):存储子树;
bool IsStoredValue(const std::string&label):判断子树是否已经存储;
TNodeGetStoredValue(const std::string&label):根据lable获取已经存储的子树;
void DeleteTree(TNodenode):删除树;
TNodeCloneTree(TNode/>node):克隆树;
void AddSubTree(TNodeparent, TNode/>child):添加子树;
void SetRoot(TNodenode):设置根节点;
TNodeGetRoot():获取根节点;
void ReleaseTempMapNodes():释放存储的子树;
bool IsInput(const std::string&identifier):判断是否是一个输入节点;
bool IsOutput(const std::string&identifier):判读是否是一个输出节点;
std::string GetConvertedInputName(const std::string&identifier):获取一个转换后的输入节点名称;
std::string GetConvertedOutputName(const std::string&identifier):获取一个转换后的输出节点名称;
OperatorTypeGetOpFuncType(const std::string&identifier):获取当前节点类型。
作为一种可选的实施例,创建驱动构造器之后,树状中间表示生成方法还包括:
获取语法树的根节点指针、节点的深度以及布尔值;
基于根节点指针、节点的深度和布尔值输出算子描述文本对应的图形化树状结构。
本实施例中为了增强用户体验和调试的便利性,驱动构造器中特别引入了一个名为PrintTree的函数,这个函数接受三个参数:树的根节点指针root、节点的深度depth,以及一个布尔值is_last,布尔值指示节点是否是其父节点的最后一个子节点。通过这个函数,用户可以将语法树的结构以图形化的方式直观地展示出来。
作为一种可选的实施例,基于根节点指针、节点的深度和布尔值输出算子描述文本对应的图形化树状结构的过程包括:
基于根节点指针遍历语法树的每一节点;
基于遍历到的当前节点的深度以及当前节点对应的布尔值进行缩进和连线,得到图形化树状结构。
可以理解,PrintTree函数可以帮助用户更清晰地理解算子的结构和计算流程。当调用该函数时,它会递归地遍历整棵树,根据节点的深度和是否为最后一个子节点信息,以缩进和连线的方式输出树状结构。这样用户不仅可以看到每个算子的名称和节点标签,还能了解到它们在内存中的地址,从而更轻松地进行代码调试和问题追踪。图形化示例的展示,使得算子的树状结构一目了然,用户可以迅速识别出各个算子之间的关系,理解数据的流向和计算过程,对于调试复杂算法、识别潜在的性能瓶颈或逻辑错误非常有帮助,从而提高开发效率和代码质量。
综上,参照图4所示,本发明采用词法分析器、语法分析器、驱动构造器、词法分析器生成器和语法分析器生成器实现了根据输入的算子描述文本构造树状数据结构的计算机表达式。灵活性增强:允许用户以自定义、非标准化的格式编写算子组合公式,这意味着用户可以根据其特定的需求或偏好来定义公式格式,大大提高了系统的灵活性。解析效率提升:通过精心编写的词法和语法规则文件,能够快速而准确地解析这些自定义公式。这减少了解析时间,从而提高了整体性能。易于维护和更新:采用模块化的设计原则,使得词法分析、语法分析和TreeIR构造功能可以独立地进行修改和更新。当规则发生变化时,只需修改相应的规则文件,而无需对整个模块进行重构,这大大简化了维护和更新过程。可扩展性增强:本发明为用户提供了更大的自定义空间。用户可以根据自己的需求,添加新的语法规则或适应新的公式格式,从而轻松扩展系统的功能。这种可扩展性使得本发明能够适应未来可能出现的新需求和变化。降低开发成本:由于系统的高灵活性和可扩展性,开发人员无需为每次规则变化或更新进行大量的重构工作,从而降低了开发成本。为深度学习框架中的算子基础化模块带来了显著的灵活性、效率、可维护性、可扩展性和成本效益方面的优势。
第二方面,请参照图5,图5为本发明所提供的一种树状中间表示生成系统的结构示意图,该树状中间表示生成系统包括:
接收模块11,用于接收用户编写的算子描述文本;
第一处理模块12,用于基于当前词法规则创建词法分析器,调用词法分析器对算子描述文本进行切分得到多个词法单元;
第二处理模块13,用于基于当前语法规则创建语法分析器,调用语法分析器对多个词法单元和当前语法规则进行匹配,基于与当前语法规则匹配的词法单元创建与当前语法规则对应的节点构造,节点构造包括至少一个节点,节点与词法单元一一对应;
第三处理模块14,用于根据所有节点构造生成语法树,将语法树转换为树状中间表示。
作为一种可选的实施例,基于当前词法规则创建词法分析器的过程包括:
获取预定义的当前词法规则;
基于当前词法规则生成词法分析器的头文件和源文件;
利用词法分析器的头文件和源文件创建词法分析器。
作为一种可选的实施例,当前词法规则包括与识别关键字对应的第一词法规则、与识别操作符对应的第二词法规则、与识别函数名对应的第三词法规则、与识别标识符对应的第四词法规则、与识别分隔符对应的第五词法规则中的至少一项。
作为一种可选的实施例,调用词法分析器对算子描述文本进行切分得到多个词法单元的过程包括:
调用词法分析器对算子描述文本中各个类型的子文本进行识别;类型包括关键字、操作符、函数名、标识符和分隔符中的至少一项;
每识别到一个与任一类型匹配的子文本,基于子文本及其匹配的类型得到一个词法单元。
作为一种可选的实施例,获取预定义的当前词法规则的过程包括:
获取基于正则表达式预定义的当前词法规则;
或,
获取基于目标描述性语言预定义的当前词法规则。
作为一种可选的实施例,获取预定义的当前词法规则的过程包括:
从第一预设位置读取第一用户配置文件;
从第一用户配置文件中读取预定义的当前词法规则。
作为一种可选的实施例,第一处理模块12还用于基于多个词法单元组成词法序列;
将多个词法单元和至少一条当前词法规则进行匹配的过程包括:
将词法序列与至少一条当前词法规则进行匹配。
作为一种可选的实施例,基于当前语法规则创建语法分析器的过程包括:
获取预定义的当前语法规则;
基于当前语法规则生成语法分析器的头文件和源文件;
利用语法分析器的头文件和源文件创建语法分析器。
作为一种可选的实施例,基于当前语法规则生成语法分析器的头文件和源文件的过程包括:
将当前语法规则转换为由键值对组成的内部数据结构;
基于当前语法规则构建至少一个解析表;解析表用于指导语法分析器在匹配过程中的决策;
利用解析表和内部数据结构生成语法分析器的头文件和源文件。
作为一种可选的实施例,当前语法规则包括与识别标识符、操作符和常量对应的第一语法规则、与识别赋值语句对应的第二语法规则、与识别表达式对应的第三语法规则、与识别函数调用对应的第四语法规则中的至少一条。
作为一种可选的实施例,调用语法分析器对多个词法单元和至少一条当前语法规则进行匹配的过程包括:
调用语法分析器对多个词法单元分别与第一语法规则和/或第二语法规则和/或第三语法规则和/或第四语法规则进行匹配;
基于与当前语法规则匹配的词法单元创建与当前语法规则对应的节点构造的过程包括:
若多个词法单元中存在与第一语法规则匹配的至少一个第一词法单元,将至少一个第一词法单元创建为第一语法规则对应的节点构造;
若多个词法单元中存在与第二语法规则匹配的至少一个第二词法单元,将至少一个第二词法单元创建为第二语法规则对应的节点构造;
若多个词法单元中存在与第三语法规则匹配的至少一个第三词法单元,将至少一个第三词法单元创建为第三语法规则对应的节点构造;
若多个词法单元中存在与第四语法规则匹配的至少一个第四词法单元,将至少一个第四词法单元创建为第四语法规则对应的节点构造。
作为一种可选的实施例,调用树状中间表示生成系统还包括:
报警模块,用于在调用语法分析器对多个词法单元和至少一条当前语法规则进行匹配之后,若多个词法单元与任一当前语法规则均不匹配,生成语法错误报告。
作为一种可选的实施例,获取预定义的当前语法规则的过程包括:
从第二预设位置读取第二用户配置文件;
从第二用户配置文件中读取预定义的当前语法规则。
作为一种可选的实施例,树状中间表示生成系统还包括:
创建模块,用于创建驱动构造器;
当识别到与当前语法规则匹配的至少一个词法单元时,通过驱动构造器对与当前语法规则匹配的至少一个词法单元进行节点类型判断操作,并基于节点类型判断操作的判断结果进行名称转换操作得到与当前语法规则匹配的至少一个词法单元对应的节点名称;
基于与当前语法规则匹配的词法单元创建与当前语法规则对应的节点构造的过程包括:
基于与当前语法规则匹配的至少一个词法单元对应的节点名称创建与当前语法规则对应的节点构造。
作为一种可选的实施例,创建驱动构造器之后,树状中间表示生成系统还包括:
获取模块,用于获取语法树的根节点指针、节点的深度以及布尔值;
展示模块,用于基于根节点指针、节点的深度和布尔值输出算子描述文本对应的图形化树状结构。
作为一种可选的实施例,基于根节点指针、节点的深度和布尔值输出算子描述文本对应的图形化树状结构的过程包括:
基于根节点指针遍历语法树的每一节点;
基于遍历到的当前节点的深度以及当前节点对应的布尔值进行缩进和连线,得到图形化树状结构。
第三方面,请参照图6,图6为本发明所提供的一种电子设备的结构示意图,包括:
存储器21,用于存储计算机程序;
处理器22,用于执行计算机程序时实现如上文任意一个实施例所描述的树状中间表示生成方法的步骤。
该电子设备还包括:
输入接口23,经通信总线26与处理器22相连,用于获取外部导入的计算机程序、参数和指令,经处理器22控制保存至存储器21中。该输入接口可以与输入装置相连,接收用户手动输入的参数或指令。该输入装置可以是显示屏上覆盖的触摸层,也可以是终端外壳上设置的按键、轨迹球或触控板。
显示单元24,经通信总线26与处理器22相连,用于显示处理器22发送的数据。该显示单元可以为液晶显示屏或者电子墨水显示屏等。
网络端口25,经通信总线26与处理器22相连,用于与外部各终端设备进行通信连接。该通信连接所采用的通信技术可以为有线通信技术或无线通信技术,如移动高清链接技术、通用串行总线、高清多媒体接口、无线保真技术、蓝牙通信技术、低功耗蓝牙通信技术、基于IEEE802.11s的通信技术等。
对于本发明所提供的一种电子设备的介绍请参照上述实施例,本发明在此不再赘述。
本发明所提供的一种电子设备具有和上述树状中间表示生成方法相同的有益效果。
第四方面,请参照图7,图7为本发明所提供的一种非易失性存储介质的结构示意图,非易失性存储介质30上存储有计算机程序31,计算机程序31被处理器执行时实现如上文任意一个实施例所描述的树状中间表示生成方法的步骤。
对于本发明所提供的一种非易失性存储介质30的介绍请参照上述实施例,本发明在此不再赘述。
本发明所提供的一种非易失性存储介质30具有和上述树状中间表示生成方法相同的有益效果。
第五方面,本发明还提供了一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现上文任意一个实施例所描述的树状中间表示生成方法的步骤。
对于本发明所提供的一种计算机程序产品的介绍请参照上述实施例,本发明在此不再赘述。
本发明所提供的一种计算机程序产品具有和上述树状中间表示生成方法相同的有益效果。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的状况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其他实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (20)
1.一种树状中间表示生成方法,其特征在于,包括:
接收用户编写的算子描述文本;
基于当前词法规则创建词法分析器,调用所述词法分析器对所述算子描述文本进行切分得到多个词法单元;
基于当前语法规则创建语法分析器,调用所述语法分析器对多个所述词法单元和所述当前语法规则进行匹配,基于与所述当前语法规则匹配的词法单元创建与所述当前语法规则对应的节点构造,所述节点构造包括至少一个节点,所述节点与所述词法单元一一对应;
根据所有所述节点构造生成语法树,将所述语法树转换为树状中间表示。
2.根据权利要求1所述的树状中间表示生成方法,其特征在于,基于当前词法规则创建词法分析器的过程包括:
获取预定义的所述当前词法规则;
基于所述当前词法规则生成词法分析器的头文件和源文件;
利用所述词法分析器的头文件和源文件创建词法分析器。
3.根据权利要求2所述的树状中间表示生成方法,其特征在于,所述当前词法规则包括与识别关键字对应的第一词法规则、与识别操作符对应的第二词法规则、与识别函数名对应的第三词法规则、与识别标识符对应的第四词法规则、与识别分隔符对应的第五词法规则中的至少一项。
4.根据权利要求3所述的树状中间表示生成方法,其特征在于,调用所述词法分析器对所述算子描述文本进行切分得到多个词法单元的过程包括:
调用所述词法分析器对所述算子描述文本中各个类型的子文本进行识别;所述类型包括所述关键字、所述操作符、所述函数名、所述标识符和所述分隔符中的至少一项;
每识别到一个与任一所述类型匹配的子文本,基于所述子文本及其匹配的类型得到一个词法单元。
5.根据权利要求2所述的树状中间表示生成方法,其特征在于,获取预定义的所述当前词法规则的过程包括:
获取基于正则表达式预定义的所述当前词法规则;
或,
获取基于目标描述性语言预定义的所述当前词法规则。
6.根据权利要求2所述的树状中间表示生成方法,其特征在于,获取预定义的所述当前词法规则的过程包括:
从第一预设位置读取第一用户配置文件;
从所述第一用户配置文件中读取所述预定义的所述当前词法规则。
7.根据权利要求1所述的树状中间表示生成方法,其特征在于,基于当前词法规则创建词法分析器,调用所述词法分析器对所述算子描述文本进行切分得到多个词法单元之后,调用所述语法分析器对多个所述词法单元和所述当前语法规则进行匹配之前,所述树状中间表示生成方法还包括;
基于多个所述词法单元组成词法序列;
调用所述语法分析器对多个所述词法单元和所述当前语法规则进行匹配的过程包括:
调用所述语法分析器将所述词法序列与至少一条所述当前词法规则进行匹配。
8.根据权利要求1所述的树状中间表示生成方法,其特征在于,基于当前语法规则创建语法分析器的过程包括:
获取预定义的所述当前语法规则;
基于所述当前语法规则生成语法分析器的头文件和源文件;
利用所述语法分析器的头文件和源文件创建语法分析器。
9.根据权利要求8所述的树状中间表示生成方法,其特征在于,基于所述当前语法规则生成语法分析器的头文件和源文件的过程包括:
将所述当前语法规则转换为由键值对组成的内部数据结构;
基于所述当前语法规则构建至少一个解析表;所述解析表用于指导所述语法分析器在匹配过程中的决策;
利用所述解析表和所述内部数据结构生成所述语法分析器的头文件和源文件。
10.根据权利要求8所述的树状中间表示生成方法,其特征在于,所述当前语法规则包括与识别标识符、操作符和常量对应的第一语法规则、与识别赋值语句对应的第二语法规则、与识别表达式对应的第三语法规则、与识别函数调用对应的第四语法规则中的至少一条。
11.根据权利要求10所述的树状中间表示生成方法,其特征在于,调用所述语法分析器对多个所述词法单元和所述当前语法规则进行匹配的过程包括:
调用所述语法分析器对多个所述词法单元分别与所述第一语法规则和/或所述第二语法规则和/或所述第三语法规则和/或所述第四语法规则进行匹配;
基于与所述当前语法规则匹配的词法单元创建与所述当前语法规则对应的节点构造的过程包括:
若多个所述词法单元中存在与所述第一语法规则匹配的至少一个第一词法单元,将至少一个所述第一词法单元创建为所述第一语法规则对应的节点构造;
若多个所述词法单元中存在与所述第二语法规则匹配的至少一个第二词法单元,将至少一个所述第二词法单元创建为所述第二语法规则对应的节点构造;
若多个所述词法单元中存在与所述第三语法规则匹配的至少一个第三词法单元,将至少一个所述第三词法单元创建为所述第三语法规则对应的节点构造;
若多个所述词法单元中存在与所述第四语法规则匹配的至少一个第四词法单元,将至少一个所述第四词法单元创建为所述第四语法规则对应的节点构造。
12.根据权利要求8所述的树状中间表示生成方法,其特征在于,调用所述语法分析器对多个所述词法单元和所述当前语法规则进行匹配之后,所述树状中间表示生成方法还包括:
若多个所述词法单元与任一所述当前语法规则均不匹配,生成语法错误报告。
13.根据权利要求8所述的树状中间表示生成方法,其特征在于,获取预定义的所述当前语法规则的过程包括:
从第二预设位置读取第二用户配置文件;
从所述第二用户配置文件中读取所述预定义的所述当前语法规则。
14.根据权利要求1-13任意一项所述的树状中间表示生成方法,其特征在于,所述树状中间表示生成方法还包括:
创建驱动构造器;
当识别到与所述当前语法规则匹配的至少一个所述词法单元时,通过所述驱动构造器对与所述当前语法规则匹配的至少一个所述词法单元进行节点类型判断操作,并基于所述节点类型判断操作的判断结果进行名称转换操作得到与所述当前语法规则匹配的至少一个所述词法单元对应的节点名称;
基于与所述当前语法规则匹配的词法单元创建与所述当前语法规则对应的节点构造的过程包括:
基于与所述当前语法规则匹配的至少一个所述词法单元对应的节点名称创建与所述当前语法规则对应的节点构造。
15.根据权利要求14所述的树状中间表示生成方法,其特征在于,创建驱动构造器之后,所述树状中间表示生成方法还包括:
获取所述语法树的根节点指针、节点的深度以及布尔值;
基于所述根节点指针、所述节点的深度和所述布尔值输出所述算子描述文本对应的图形化树状结构。
16.根据权利要求15所述的树状中间表示生成方法,其特征在于,基于所述根节点指针、所述节点的深度和所述布尔值输出所述算子描述文本对应的图形化树状结构的过程包括:
基于所述根节点指针遍历所述语法树的每一所述节点;
基于遍历到的当前节点的深度以及所述当前节点对应的所述布尔值进行缩进和连线,得到图形化树状结构。
17.一种树状中间表示生成系统,其特征在于,包括:
接收模块,用于接收用户编写的算子描述文本;
第一处理模块,用于基于当前词法规则创建词法分析器,调用所述词法分析器对所述算子描述文本进行切分得到多个词法单元;
第二处理模块,用于基于当前语法规则创建语法分析器,调用所述语法分析器对多个所述词法单元和所述当前语法规则进行匹配,基于与所述当前语法规则匹配的词法单元创建与所述当前语法规则对应的节点构造,所述节点构造包括至少一个节点,所述节点与所述词法单元一一对应;
第三处理模块,用于根据所有所述节点构造生成语法树,将所述语法树转换为树状中间表示。
18.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1-16任意一项所述的树状中间表示生成方法的步骤。
19.一种非易失性存储介质,其特征在于,所述非易失性存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1-16任意一项所述的树状中间表示生成方法的步骤。
20.一种计算机程序产品,包括计算机程序/指令,其特征在于,该计算机程序/指令被处理器执行时实现权利要求1-16任意一项所述树状中间表示生成方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410534329.XA CN118113302A (zh) | 2024-04-30 | 2024-04-30 | 一种树状中间表示生成方法、系统、设备、介质、产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410534329.XA CN118113302A (zh) | 2024-04-30 | 2024-04-30 | 一种树状中间表示生成方法、系统、设备、介质、产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118113302A true CN118113302A (zh) | 2024-05-31 |
Family
ID=91208895
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410534329.XA Pending CN118113302A (zh) | 2024-04-30 | 2024-04-30 | 一种树状中间表示生成方法、系统、设备、介质、产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118113302A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102799437A (zh) * | 2012-07-18 | 2012-11-28 | 清华大学 | 一种编译脚本自动生成方法和自动生成装置 |
US20150201420A1 (en) * | 2014-01-14 | 2015-07-16 | U.S Army Research Laboratory ATTN: RDRL-LOC-I | Fast method for wideband spectrum sensing |
CN110209766A (zh) * | 2019-05-23 | 2019-09-06 | 招商局金融科技有限公司 | 数据展示方法、电子装置及存储介质 |
CN112445812A (zh) * | 2020-11-27 | 2021-03-05 | 中原银行股份有限公司 | 一种结构化查询语句处理方法及装置 |
CN116431156A (zh) * | 2023-03-17 | 2023-07-14 | 华南理工大学 | 一种st语言转换为c++语言的转换系统及方法 |
-
2024
- 2024-04-30 CN CN202410534329.XA patent/CN118113302A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102799437A (zh) * | 2012-07-18 | 2012-11-28 | 清华大学 | 一种编译脚本自动生成方法和自动生成装置 |
US20150201420A1 (en) * | 2014-01-14 | 2015-07-16 | U.S Army Research Laboratory ATTN: RDRL-LOC-I | Fast method for wideband spectrum sensing |
CN110209766A (zh) * | 2019-05-23 | 2019-09-06 | 招商局金融科技有限公司 | 数据展示方法、电子装置及存储介质 |
CN112445812A (zh) * | 2020-11-27 | 2021-03-05 | 中原银行股份有限公司 | 一种结构化查询语句处理方法及装置 |
CN116431156A (zh) * | 2023-03-17 | 2023-07-14 | 华南理工大学 | 一种st语言转换为c++语言的转换系统及方法 |
Non-Patent Citations (1)
Title |
---|
刘黎志、吴云韬、牛志梅编著: "《数据库应用开发技术》", 31 May 2021, pages: 209 - 210 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100527127C (zh) | 查询中间语言的方法和系统 | |
CN108595171B (zh) | 对象的模型生成方法、装置、设备及存储介质 | |
JPH08202545A (ja) | ターゲット言語コードを生成するためのオブジェクト指向システム及びその方法 | |
CN101814065B (zh) | 句法分析装置及句法分析方法 | |
US20060200796A1 (en) | Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus | |
CN110673854A (zh) | Sas语言编译方法、装置、设备及可读存储介质 | |
KR20090009834A (ko) | 프로그래밍 언어에서 수식 트리의 깊은 임베딩을 위한 범용인터페이스를 제공하는 시스템, 컴퓨터 구현 방법 및 컴퓨터 구현 시스템 | |
CN111656453A (zh) | 用于信息提取的层次实体识别和语义建模框架 | |
US20220004526A1 (en) | Method and apparatus of converting schema in deep learning framework, and computer storage medium | |
Fedorchenko et al. | Equivalent transformations and regularization in context-free grammars | |
CN114398039B (zh) | 一种自动细粒度的两级并行翻译方法 | |
CN108008947B (zh) | 一种编程语句的智能提示方法、装置、服务器及存储介质 | |
WO2013154055A1 (ja) | 構造解析装置及びプログラム | |
Rajbhoj et al. | DocToModel: automated authoring of models from diverse requirements specification documents | |
CN116400910A (zh) | 一种基于api替换的代码性能优化方法 | |
CN111126008A (zh) | 基于xsd的代码生成方法、装置、计算机设备及存储介质 | |
Nagl et al. | A specification environment for graph grammars | |
CN118113302A (zh) | 一种树状中间表示生成方法、系统、设备、介质、产品 | |
CN114115872A (zh) | 一种业务表达式生成和解析工具的实现方法及装置 | |
CN114675831B (zh) | 一种编程语言的编译系统及方法 | |
Nguyen | Statistical Models and Machine Learning to Advance Code Completion: Are We There Yet? | |
Mishchenko et al. | New functionalities of the system for processing natural language specifications and its operating environment | |
CN111158691B (zh) | 实现规则引擎动态化的方法 | |
Amal et al. | Software tool for translating pseudocode to a programming language | |
CN118069149A (zh) | 一种用于ros机器人任务规划的图形化pddl编译方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |