CN114090017B - 编程语言的解析方法及装置、非易失性存储介质 - Google Patents

编程语言的解析方法及装置、非易失性存储介质 Download PDF

Info

Publication number
CN114090017B
CN114090017B CN202210063667.0A CN202210063667A CN114090017B CN 114090017 B CN114090017 B CN 114090017B CN 202210063667 A CN202210063667 A CN 202210063667A CN 114090017 B CN114090017 B CN 114090017B
Authority
CN
China
Prior art keywords
lexical
units
lexical units
class
unit
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.)
Active
Application number
CN202210063667.0A
Other languages
English (en)
Other versions
CN114090017A (zh
Inventor
李若
卢朓
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beitai Zhenhuan Chongqing Technology Co ltd
Original Assignee
Chongqing Big Data Research Institute Of Peking University
Peking University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Chongqing Big Data Research Institute Of Peking University, Peking University filed Critical Chongqing Big Data Research Institute Of Peking University
Priority to CN202210063667.0A priority Critical patent/CN114090017B/zh
Publication of CN114090017A publication Critical patent/CN114090017A/zh
Application granted granted Critical
Publication of CN114090017B publication Critical patent/CN114090017B/zh
Priority to PCT/CN2022/119100 priority patent/WO2023138078A1/zh
Priority to EP22888614.9A priority patent/EP4242832A4/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/425Lexical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请公开了一种编程语言的解析方法及装置、非易失性存储介质。其中,该方法包括:将源代码识别为字符流,并将字符流解析为词法单元列表,其中,词法单元列表中包括多个词法单元;将多个词法单元分为第一类词法单元和第二类词法单元,其中,第一类词法单元为包括歧义符号的词法单元,第二类词法单元为不包括歧义符号的词法单元;将第一类词法单元转换为第二类词法单元;对由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元进行解析。本申请解决了数值计算编程语言引入的数学符号具有多义导致解释器处理数值计算编程语言时容易出错的技术问题。

Description

编程语言的解析方法及装置、非易失性存储介质
技术领域
本申请涉及软件领域,具体而言,涉及一种编程语言的解析方法及装置、非易失性存储介质。
背景技术
图1是目前高级编程语言的编译运行过程的示意图,如图1所示,高级语言的编译运行过程,涉及到图1所示的三种形式:a)编译型语言(如C语言),源代码通过编译器生成二进制可执行程序,由机器直接执行;b)第一种解释型语言(如Java语言),源代码通过解释器转化为中间代码(如字节码),在虚拟机中解释执行;c)第二种解释型语言(如Lisp语言),源代码通过解释器直接解释执行。
编译器是一种将源语言程序(通常为高级语言)翻译为目标语言(通常指二进制数表示的机器语言)写成的程序。图2是编译器的运行过程流程图,如图2所示,整个编译过程如图2所示,大致可分为6个阶段:语法分析、语义分析、中间代码产生、代码优化及目标代码生产。
图3是解释器的运行过程流程图,如图3所示,解释器是一种将源代码解释执行的程序。整个解释过程大致可分为4个阶段,包括:词法分析、语法分析、语义分析、中间代码生成或直接解释执行。
1)词法分析器,对构成源程序的字符流进行扫描,即从左到右一个字符一个字符地读入源程序,然后根据构词规则识别单词(也称单词符号或符号),重新组织为词法单元列表。
2)语法分析器,使用由词法分析得到的各个词法单元的第一个分量来创建语法树,其中树中的每个内部结点表示一个运算,而该结点的子结点表示该运算的分量。语法分析是一个逻辑阶段,判断源程序在结构上是否正确。
3)语义分析器,使用语法树和符号表中的信息来检查源程序是否和语言定义的语义一致。同时收集类型信息,并生成抽象语法树。语义分析是一个逻辑阶段,对结构上正确的源程序进行上下文有关性质的审查,主要是类型检查。
现有解释器在处理一般编程语言,如Lisp语言,是足够的,但处理数值计算编程语言时则有所不足。数值计算语言会引入更多的数学符号,从而导致一些符号具有多义,即源代码中具有歧义代码。比如,源代码中的单引号’既可以表示字符的开始或结束,又可以用来表示矩阵的转置。当单引号表示字符的开始或结束时,其类型为界限符;当单引号表示矩阵的转置时,其类型为运算符。单引号作为不同类型时,生产的语法树和抽象语法树具有本质区别。在现有解释器的架构基础上,解释器只会把单引号当做固定的一种类型处理,从而导致错误结果。
针对数值计算编程语言引入的数学符号具有多义导致解释器处理数值计算编程语言时容易出错的问题,目前尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种编程语言的解析方法及装置、非易失性存储介质,以至少解决数值计算编程语言引入的数学符号具有多义导致解释器处理数值计算编程语言时容易出错的技术问题。
根据本申请实施例的一个方面,提供了一种编程语言的解析方法,包括:将源代码识别为字符流,并将字符流解析为词法单元列表,其中,词法单元列表中包括多个词法单元;将多个词法单元分为第一类词法单元和第二类词法单元,其中,第一类词法单元为包括歧义符号的词法单元,第二类词法单元为不包括歧义符号的词法单元;将第一类词法单元转换为第二类词法单元;对由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元进行解析。
可选地,将多个词法单元分为第一类词法单元和第二类词法单元,包括:获取多个词法单元的符号名;从符号名中确定出具有歧义的目标符号名;将目标符号名所属的词法单元确定为第一类词法单元,将符号名中除目标符号名以外的符号名所属的词法单元确定为第二类词法单元。
可选地,将第一类词法单元转换为第二类词法单元,包括:将第一类词法单元输入至语义分析器进行解析,得到第二类词法单元;对由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元进行解析,包括:将由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元输入至语法分析器进行解析;将语法分析器对第二类词法单元的解析结果输入至语义分析器进行解析。
可选地,将第一类词法单元输入至语义分析器进行解析,得到第二类词法单元,包括:依据第一类词法单元的上下文信息,确定第一类词法单元的符号名的类型;依据第一类词法单元的符号名的类型,修改第一类词法单元的属性值,得到第二类词法单元。
可选地,将由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元输入至语法分析器进行解析,包括:将由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元组装成语法分析树。
可选地,将语法分析器对第二类词法单元的解析结果输入至语义分析器进行解析,包括:对语法分析树进行精简处理,构建抽象语法树。
可选地,将字符流解析为词法单元列表,包括:按照预设构词规则将字符流解析为词法单元列表,其中,词法单元列表中的每个词法单元包括:符号名和属性值,其中,符号名为词法单元本身,属性值为词法单元的类型。
根据本申请实施例的另一方面,还提供了一种编程语言的解析装置,包括:第一解析模块,用于将源代码识别为字符流,并将字符流解析为词法单元列表,其中,词法单元列表中包括多个词法单元;分类模块,用于将多个词法单元分为第一类词法单元和第二类词法单元,其中,第一类词法单元为包括歧义符号的词法单元,第二类词法单元为不包括歧义符号的词法单元;转换模块,用于将第一类词法单元转换为第二类词法单元;第二解析模块,用于对由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元进行解析。
根据本申请实施例的再一方面,还提供了一种非易失性存储介质,非易失性存储介质包括存储的程序,其中,在程序运行时控制非易失性存储介质所在设备执行以上的编程语言的解析方法。
根据本申请实施例的再一方面,还提供了一种处理器,处理器用于运行存储在存储器中的程序,其中,程序运行时执行以上的编程语言的解析方法。
在本申请实施例中,采用将源代码识别为字符流,并将字符流解析为词法单元列表,其中,词法单元列表中包括多个词法单元;将多个词法单元分为第一类词法单元和第二类词法单元,其中,第一类词法单元为包括歧义符号的词法单元,第二类词法单元为不包括歧义符号的词法单元;将第一类词法单元转换为第二类词法单元;对由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元进行解析的方式,通过对词法分析的结果—词法单元列表进行分类处理,将具有歧义的词法单元转换为没有歧义的词法单元,达到了改进解释器处理歧义代码能力的目的,从而实现了提高解释器处理数值计算编程语言的准确度的技术效果,进而解决了数值计算编程语言引入的数学符号具有多义导致解释器处理数值计算编程语言时容易出错技术问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是目前高级编程语言的编译运行过程的示意图;
图2是编译器的运行过程流程图;
图3是解释器的运行过程流程图;
图4是根据本申请实施例的一种编程语言的解析方法的流程图;
图5a是根据本申请实施例的一种抽象语法树的示意图;
图5b是根据本申请实施例的另一种抽象语法树的示意图;
图6是根据本申请实施例的一种编程语言的解析装置的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本申请实施例,提供了一种编程语言的解析方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图4是根据本申请实施例的一种编程语言的解析方法的流程图,如图4所示,该方法包括如下步骤:
步骤S402,将源代码识别为字符流,并将字符流解析为词法单元列表,其中,词法单元列表中包括多个词法单元;
在本步骤中,识别源代码,把源代码识别为字符流。词法分析器接收字符流,根据设定的构词规则,把源程序解析为词法单元列表,词法单元列表中包括多个词法单元。
步骤S404,将多个词法单元分为第一类词法单元和第二类词法单元,其中,第一类词法单元为包括歧义符号的词法单元,第二类词法单元为不包括歧义符号的词法单元;
在执行步骤S404时,对词法单元列表进行分类处理,分为包括歧义符号的词法单元以及不包括歧义符号的词法单元。
步骤S406,将第一类词法单元转换为第二类词法单元;
步骤S408,对由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元进行解析。
通过上述步骤,通过对词法分析的结果—词法单元列表进行分类处理,将具有歧义的词法单元转换为没有歧义的词法单元,达到了改进解释器处理歧义代码能力的目的,从而实现了提高解释器处理数值计算编程语言的准确度的技术效果。
根据本申请的一个可选的实施例,步骤S404将多个词法单元分为第一类词法单元和第二类词法单元,通过以下方法实现:获取多个词法单元的符号名;从符号名中确定出具有歧义的目标符号名;将目标符号名所属的词法单元确定为第一类词法单元,将符号名中除目标符号名以外的符号名所属的词法单元确定为第二类词法单元。
在本步骤中,通过词法单元的符号名,找出具有歧义的符号,把此类词法单元标为第一类词法单元,其他词法单元,标为第二类词法单元。
根据本申请的另一个可选的实施例,执行步骤S406将第一类词法单元转换为第二类词法单元,包括:将第一类词法单元输入至语义分析器进行解析,得到第二类词法单元。
可选地,将第一类词法单元输入至语义分析器进行解析,得到第二类词法单元,包括:依据第一类词法单元的上下文信息,确定第一类词法单元的符号名的类型;依据第一类词法单元的符号名的类型,修改第一类词法单元的属性值,得到第二类词法单元。
在本步骤中,语义解析器接收第一类词法单元,根据上下文判别第一类词法单元的单词符号的具体类型,根据判别结果修改第一类词法单元的属性值,把第一类词法单元的类型改为第二类词法单元。
在本申请的一些可选的实施例中,执行步骤S408对由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元进行解析,包括:将由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元输入至语法分析器进行解析;将语法分析器对第二类词法单元的解析结果输入至语义分析器进行解析。
在本申请的一些可选的实施例中,将由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元输入至语法分析器进行解析,包括:将由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元组装成语法分析树。
语法分析器接收第二类词法单元,按照设定的文法规则,将词法单元序列组装成语法分析树。采用自适应LL(k)算法,所述LL中的第一个L表示从左向右对词法单元序列进行分析,第二个L表示分析过程中将使用最左推导,k≥1,k表示在按照所述文法规则的匹配过程中向前匹配k个词法单元,所述自适应LL(k)算法能够在语法分析的过程中以动态的方式对语法执行分析,并且能够自动将文法中的左递归改写为等价的非左递归形式。
根据本申请的一个可选的实施例,将语法分析器对第二类词法单元的解析结果输入至语义分析器进行解析,包括:对语法分析树进行精简处理,构建抽象语法树。
语义分析器接收语法分析树和词法单元序列、符号表信息,精简语法树,构建抽象语法树。语法分析器将错误信息输出到错误处理模块,并根据语法分析结果更新符号表管理模块中的标识符。语义分析器将错误信息输出到错误处理模块,并根据语义分析结果更新符号表管理模块中的标识符。
图5a是根据本申请实施例的一种抽象语法树的示意图,如图5a所示,给出了一个定义简单矩阵的源代码对应的语法树,其中L表示列表,R表示行,J表示矩阵,F表示内置函数,都放在自定义的符号表中。
图5a所示的语法树对应的源代码为a = [1,2;2,exp(2)]。
图5b是根据本申请实施例的另一种抽象语法树的示意图,如图5b所示,给出了一个自定义函数sum源代码对应的语法树,其中C表示自定义函数。
图5b所示的语法树对应的源代码为sum(2,3)。
根据本申请的另一个可选的实施例,执行步骤S402时,将字符流解析为词法单元列表,通过以下方法实现:按照预设构词规则将字符流解析为词法单元列表,其中,词法单元列表中的每个词法单元包括:符号名和属性值,其中,符号名为词法单元本身,属性值为词法单元的类型。
语法分析器接收字符流,按照设定的构词规则,把源程序解析为词法单元列表。词法单元由符号名(token-name)以及属性值(attribute-value)构成。符号名为单词本身,将由语法分析器使用。属性值表示单词的类型,包括关键字、常量、运算符、界限符、标识符。将错误信息输出到错误处理模块,将标识符输入到符号管理模块。
本申请实施例提供的上述方法,可以解决数值计算编程语言中具有歧义符号的问题,也可以解决其他编程语言中含有歧义符号的问题。基于该技术方案的编译器,可以应用于数值计算编程语言,如Maltab和Octave。
图6是根据本申请实施例的一种编程语言的解析装置的结构框图,如图6所示,该装置包括:
第一解析模块60,用于将源代码识别为字符流,并将字符流解析为词法单元列表,其中,词法单元列表中包括多个词法单元;
分类模块62,用于将多个词法单元分为第一类词法单元和第二类词法单元,其中,第一类词法单元为包括歧义符号的词法单元,第二类词法单元为不包括歧义符号的词法单元;
转换模块64,用于将第一类词法单元转换为第二类词法单元;
第二解析模块66,用于对由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元进行解析。
需要说明的是,图6所示实施例的优选实施方式可以参见图4所示实施例的相关描述,此处不再赘述。
本申请实施例还提供了一种非易失性存储介质,非易失性存储介质包括存储的程序,其中,在程序运行时控制非易失性存储介质所在设备执行以上的编程语言的解析方法。
上述非易失性存储介质用于存储执行以下功能的程序:将源代码识别为字符流,并将字符流解析为词法单元列表,其中,词法单元列表中包括多个词法单元;将多个词法单元分为第一类词法单元和第二类词法单元,其中,第一类词法单元为包括歧义符号的词法单元,第二类词法单元为不包括歧义符号的词法单元;将第一类词法单元转换为第二类词法单元;对由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元进行解析。
本申请实施例还提供了一种处理器,处理器用于运行存储在存储器中的程序,其中,程序运行时执行以上的编程语言的解析方法。
上述处理器用于运行执行以下功能的程序:将源代码识别为字符流,并将字符流解析为词法单元列表,其中,词法单元列表中包括多个词法单元;将多个词法单元分为第一类词法单元和第二类词法单元,其中,第一类词法单元为包括歧义符号的词法单元,第二类词法单元为不包括歧义符号的词法单元;将第一类词法单元转换为第二类词法单元;对由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元进行解析。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对相关技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

Claims (8)

1.一种编程语言的解析方法,其特征在于,包括:
将源代码识别为字符流,并将所述字符流解析为词法单元列表,其中,所述词法单元列表中包括多个词法单元;
将所述多个词法单元分为第一类词法单元和第二类词法单元,其中,所述第一类词法单元为包括歧义符号的词法单元,所述第二类词法单元为不包括歧义符号的词法单元;
将所述第一类词法单元转换为所述第二类词法单元;
对由所述第一类词法单元转换得到的所述第二类词法单元和将所述多个词法单元进行分类得到的所述第二类词法单元进行解析;
将所述多个词法单元分为第一类词法单元和第二类词法单元,包括:获取所述多个词法单元的符号名;从所述符号名中确定出具有歧义的目标符号名;将所述目标符号名所属的词法单元确定为所述第一类词法单元,将所述符号名中除所述目标符号名以外的符号名所属的词法单元确定为所述第二类词法单元;
将所述第一类词法单元转换为所述第二类词法单元,包括:将所述第一类词法单元输入至语义分析器进行解析,得到所述第二类词法单元;
将所述第一类词法单元输入至语义分析器进行解析,得到所述第二类词法单元,包括:依据所述第一类词法单元的上下文信息,确定所述第一类词法单元的符号名的类型;依据所述第一类词法单元的符号名的类型,修改所述第一类词法单元的属性值,得到所述第二类词法单元。
2.根据权利要求1所述的方法,其特征在于,
对由所述第一类词法单元转换得到的所述第二类词法单元和将所述多个词法单元进行分类得到的所述第二类词法单元进行解析,包括:将由所述第一类词法单元转换得到的所述第二类词法单元和将所述多个词法单元进行分类得到的所述第二类词法单元输入至语法分析器进行解析;将所述语法分析器对所述第二类词法单元的解析结果输入至所述语义分析器进行解析。
3.根据权利要求2所述的方法,其特征在于,将由所述第一类词法单元转换得到的所述第二类词法单元和将所述多个词法单元进行分类得到的所述第二类词法单元输入至语法分析器进行解析,包括:
将由所述第一类词法单元转换得到的所述第二类词法单元和将所述多个词法单元进行分类得到的所述第二类词法单元组装成语法分析树。
4.根据权利要求3所述的方法,其特征在于,将所述语法分析器对所述第二类词法单元的解析结果输入至所述语义分析器进行解析,包括:
对所述语法分析树进行精简处理,构建抽象语法树。
5.根据权利要求1所述的方法,其特征在于,将所述字符流解析为词法单元列表,包括:
按照预设构词规则将所述字符流解析为所述词法单元列表,其中,所述词法单元列表中的每个词法单元包括:符号名和属性值,其中,所述符号名为所述词法单元本身,所述属性值为所述词法单元的类型。
6.一种编程语言的解析装置,其特征在于,包括:
第一解析模块,用于将源代码识别为字符流,并将所述字符流解析为词法单元列表,其中,所述词法单元列表中包括多个词法单元;
分类模块,用于将所述多个词法单元分为第一类词法单元和第二类词法单元,其中,所述第一类词法单元为包括歧义符号的词法单元,所述第二类词法单元为不包括歧义符号的词法单元;
转换模块,用于将所述第一类词法单元转换为所述第二类词法单元;
第二解析模块,用于对由所述第一类词法单元转换得到的所述第二类词法单元和将所述多个词法单元进行分类得到的所述第二类词法单元进行解析;
所述分类模块,还用于获取所述多个词法单元的符号名;从所述符号名中确定出具有歧义的目标符号名;将所述目标符号名所属的词法单元确定为所述第一类词法单元,将所述符号名中除所述目标符号名以外的符号名所属的词法单元确定为所述第二类词法单元;
所述转换模块,还用于依据所述第一类词法单元的上下文信息,确定所述第一类词法单元的符号名的类型;依据所述第一类词法单元的符号名的类型,修改所述第一类词法单元的属性值,得到所述第二类词法单元。
7.一种非易失性存储介质,其特征在于,所述非易失性存储介质包括存储的程序,其中,在所述程序运行时控制所述非易失性存储介质所在设备执行权利要求1至5中任意一项所述的编程语言的解析方法。
8.一种处理器,其特征在于,所述处理器用于运行存储在存储器中的程序,其中,所述程序运行时执行权利要求1至5中任意一项所述的编程语言的解析方法。
CN202210063667.0A 2022-01-20 2022-01-20 编程语言的解析方法及装置、非易失性存储介质 Active CN114090017B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202210063667.0A CN114090017B (zh) 2022-01-20 2022-01-20 编程语言的解析方法及装置、非易失性存储介质
PCT/CN2022/119100 WO2023138078A1 (zh) 2022-01-20 2022-09-15 编程语言的解析方法及装置、非易失性存储介质
EP22888614.9A EP4242832A4 (en) 2022-01-20 2022-09-15 METHOD AND APPARATUS FOR PARSING A PROGRAMMING LANGUAGE AND NON-TRANSITIOUS COMPUTER-READABLE STORAGE MEDIUM

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210063667.0A CN114090017B (zh) 2022-01-20 2022-01-20 编程语言的解析方法及装置、非易失性存储介质

Publications (2)

Publication Number Publication Date
CN114090017A CN114090017A (zh) 2022-02-25
CN114090017B true CN114090017B (zh) 2022-06-24

Family

ID=80308946

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210063667.0A Active CN114090017B (zh) 2022-01-20 2022-01-20 编程语言的解析方法及装置、非易失性存储介质

Country Status (3)

Country Link
EP (1) EP4242832A4 (zh)
CN (1) CN114090017B (zh)
WO (1) WO2023138078A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114090017B (zh) * 2022-01-20 2022-06-24 北京大学 编程语言的解析方法及装置、非易失性存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106033394A (zh) * 2015-03-13 2016-10-19 北京奇虎测腾科技有限公司 软件源代码的分析方法及装置
CN110221836A (zh) * 2018-03-02 2019-09-10 拜椰特(上海)软件技术有限公司 一种词法分析工具
CN110673854A (zh) * 2019-09-24 2020-01-10 深圳前海微众银行股份有限公司 Sas语言编译方法、装置、设备及可读存储介质
CN111309757A (zh) * 2020-05-14 2020-06-19 深圳市赢时胜信息技术股份有限公司 一种HBase的SQL解释器和优化方法
CN113741869A (zh) * 2020-09-10 2021-12-03 吕戈 一种高性能的可变语法编程语言的构造方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8843907B2 (en) * 2011-08-25 2014-09-23 Myezapp Inc. Compiler with error handling
CN114090017B (zh) * 2022-01-20 2022-06-24 北京大学 编程语言的解析方法及装置、非易失性存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106033394A (zh) * 2015-03-13 2016-10-19 北京奇虎测腾科技有限公司 软件源代码的分析方法及装置
CN110221836A (zh) * 2018-03-02 2019-09-10 拜椰特(上海)软件技术有限公司 一种词法分析工具
CN110673854A (zh) * 2019-09-24 2020-01-10 深圳前海微众银行股份有限公司 Sas语言编译方法、装置、设备及可读存储介质
CN111309757A (zh) * 2020-05-14 2020-06-19 深圳市赢时胜信息技术股份有限公司 一种HBase的SQL解释器和优化方法
CN113741869A (zh) * 2020-09-10 2021-12-03 吕戈 一种高性能的可变语法编程语言的构造方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于Python的SCPI命令解释器设计与优化;潘琦等;《工业控制计算机》;20200625(第06期);全文 *

Also Published As

Publication number Publication date
EP4242832A1 (en) 2023-09-13
CN114090017A (zh) 2022-02-25
EP4242832A4 (en) 2024-05-29
WO2023138078A1 (zh) 2023-07-27

Similar Documents

Publication Publication Date Title
CN107704265B (zh) 一种面向业务流可配置的规则生成方法
CN107644323B (zh) 一种面向业务流的智能审核系统
CN107203468B (zh) 一种基于ast的软件版本演化对比分析方法
US9122540B2 (en) Transformation of computer programs and eliminating errors
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
US11599447B2 (en) Detection of runtime errors using machine learning
CN112379917B (zh) 浏览器兼容性提升方法、装置、设备及存储介质
CN116450616A (zh) 一种基于解析树的通用异构关系型数据库sql迁移方法
Zhong et al. Semantic scaffolds for pseudocode-to-code generation
CN116541286A (zh) 一种基于插桩和符号执行的高覆盖率测试数据生成方法
US5701490A (en) Method and apparatus for compiler symbol table organization with no lookup in semantic analysis
CN114090017B (zh) 编程语言的解析方法及装置、非易失性存储介质
CN116166236A (zh) 代码推荐方法、装置、计算机设备及存储介质
CN114265772A (zh) 一种测试用例的生成方法及一种测试方法
CN113032366A (zh) 基于Flex和Bison的SQL语法树解析方法
RU2115158C1 (ru) Способ и устройство для достоверной оценки семантических признаков в синтаксическом анализе при проходе вперед слева направо
KR102614967B1 (ko) 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법
CN115292347A (zh) 一种基于规则的主动式sql算法性能检查装置及方法
CN114089980A (zh) 编程处理方法、装置、解释器及非易失性存储介质
Sunitha Compiler construction
Waite A complete specification of a simple compiler
KR20050065015A (ko) 프로그램의 복제 여부를 검사하는 방법 및 시스템
Pranav et al. On–Device Translation of Dynamically Typed and Interpreted Languages
RU2103728C1 (ru) Способ преобразования входной программы транслятора и устройство для его осуществления
US20240135210A1 (en) Replacing lambda expressions in a rete network with corresponding code classes

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
CB03 Change of inventor or designer information

Inventor after: Li Ruo

Inventor after: Lu Tiao

Inventor before: Li Ruo

Inventor before: Lu Tiao

CB03 Change of inventor or designer information
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20240906

Address after: Building 6, No. 3 Kexiang Road, Hangu Town, High tech Zone, Jiulongpo District, Chongqing 400039

Patentee after: Beitai Zhenhuan (Chongqing) Technology Co.,Ltd.

Country or region after: China

Address before: 100871 No. 5, the Summer Palace Road, Beijing, Haidian District

Patentee before: Peking University

Country or region before: China

Patentee before: Chongqing Big Data Research Institute of Peking University

TR01 Transfer of patent right