CN115145575A - 一种高级语言的解析方法、设备和计算机可读存储介质 - Google Patents

一种高级语言的解析方法、设备和计算机可读存储介质 Download PDF

Info

Publication number
CN115145575A
CN115145575A CN202210674693.7A CN202210674693A CN115145575A CN 115145575 A CN115145575 A CN 115145575A CN 202210674693 A CN202210674693 A CN 202210674693A CN 115145575 A CN115145575 A CN 115145575A
Authority
CN
China
Prior art keywords
syntax tree
abstract syntax
processed
program code
level language
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
Application number
CN202210674693.7A
Other languages
English (en)
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.)
Netease Youdao Information Technology Beijing Co Ltd
Original Assignee
Netease Youdao Information Technology Beijing Co Ltd
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 Netease Youdao Information Technology Beijing Co Ltd filed Critical Netease Youdao Information Technology Beijing Co Ltd
Priority to CN202210674693.7A priority Critical patent/CN115145575A/zh
Publication of CN115145575A publication Critical patent/CN115145575A/zh
Pending legal-status Critical Current

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/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本公开涉及一种高级语言的解析方法,该方法包括:获取由高级语言编写的待处理程序代码;根据语法对应关系将所述待处理程序代码转换为脚本源代码,所述语法对应关系包括高级语言与脚本语言的语法对应关系;根据所述脚本源代码生成抽象语法树。通过本公开的方法,使得用户在浏览器就可以直接进行高级语言的在线编程过程,解决了目前浏览器并不支持直接执行C++等高级语言,以及将高级语言向脚本语言中间转化时的成本和对编程人员的要求都比较高的问题,减少了语言转换和编译处理的开销,为用户带来了更好的体验。此外,本公开的实施方式还提供了一种设备和一种计算机可读存储介质。

Description

一种高级语言的解析方法、设备和计算机可读存储介质
技术领域
本公开一般地涉及计算机技术领域。更具体地,本公开涉及一种高级语言的解析方法、设备和计算机可读存储介质。
背景技术
本部分旨在为权利要求书中陈述的本公开的实施方式提供背景或上下文。此处的描述可包括可以探究的概念,但不一定是之前已经想到或者已经探究的概念。因此,除非在此指出,否则在本部分中描述的内容对于本申请的说明书和权利要求书而言不是现有技术,并且并不因为包括在本部分中就承认是现有技术。
当前在线编程教育行业蓬勃发展。在线编程是指不需要经过安装编程的环境,直接在互联网浏览器上编写程序,并且可以运行出结果。在线编程的原理比较复杂,因为其涉及web前端以及后端编译系统。web前端需要提供用户代码录入、行号、高亮语法和自动补全功能,并需要使用异步更新的方法来实现上述功能。后端编译系统接收到用户的代码,并调用正确的编译器进行编译并将结果返回前端进行显示。
目前主流学习的语言包括C++和Java(包括Python)等高级语言,在线编程多依赖于浏览器,但浏览器并不支持直接执行C++等高级语言。为了使浏览器执行C++代码,需要将其转化成浏览器支持的语言以达到相应执行结果。而且,目前的在线编程教学中,除了获取执行结果,还需要支持对代码的单步执行的过程操作控制,以实现更加高效的教学。基于此,目前将C++和Java(包括Python)等高级语言转换为浏览器能够支持的脚本语言等,通常采用以下几种方式:第一种是前端开发工程师学习高级语言的转化过程,以实现将高级语言转换为浏览器能够识别的语言,但是这种学习和使用成本较高,不利于推广应用。并且,高级语言转化的方式在前端使用较为繁琐,无法在前端工程中直接引入;第二种是在后端编译系统(或第三方服务器)中先将高级语言生成的程序代码转换为浏览器能够支持的语言,然后通过解析器解析成抽象语法树再解释编译执行。这种通过服务器等做中间转化的成本较高,不利于在线编程等应用的快速发展。
因此,如何解决目前利用浏览器进行编程时,浏览器并不支持直接执行C++等高级语言,以及将高级语言向脚本语言中间转化时的成本和对编程人员的要求都比较高的问题,对于促进在线编程教育行业等的发展具有重要作用。
发明内容
已知的目前浏览器并不支持直接执行C++等高级语言,需要进行高级语言向脚本语言的中间转化,但是中间转化的成本高且对编程人员的要求较高,这是非常令人烦恼的过程。
为此,非常需要一种改进的高级语言的解析方案及相关产品,能够直接将高级语言转换为基于脚本语言的抽象语法树,从而有效提升在线编程的灵活度并降低基于高级语言在线编程过程中的转化成本。为此,本公开在如下的多个方面中提供方案。
在本上下文中,本公开的实施方式期望提供一种高级语言的解析方法、设备和计算机可读存储介质。
在本公开实施方式的第一方面中,提供了一种高级语言的解析方法,包括:获取由高级语言编写的待处理程序代码;根据语法对应关系将所述待处理程序代码转换为脚本源代码,所述语法对应关系包括高级语言与脚本语言的语法对应关系;以及根据所述脚本源代码生成抽象语法树。
在本公开的一个实施例中,所述根据语法对应关系将所述待处理程序代码转换为脚本源代码包括:将所述待处理程序代码进行分割,以生成语法单位,其中所述语法单位包括以下任一或多项:语法元素单元、表达式、声明或语句、外部定义、命名空间和函数入口;以及根据语法对应关系将所述语法单位转换为对应的脚本源代码。
在本公开的另一个实施例中,其中语法元素单元包括以下一项或多项:标点符号、常量和关键字;表达式包括以下一项或多项:赋值表达式、自增表达式和自减表达式;声明包括函数声明;语句包括判断语句和循环语句。
在本公开的又一个实施例中,其中将所述待处理程序代码进行分割,以生成语法元素单元包括:将所述待处理程序代码进行识别,以确定语法元素;以及对所述待处理程序代码进行分割,并将相同的语法元素进行组合以生成语法元素单元。
在本公开的再一个实施例中,所述将所述待处理程序代码进行分割,以生成语法元素单元还包括:对所述语法元素单元进行检查,以修正所述语法元素单元。
在本公开的一个实施例中,所述将所述待处理程序代码进行分割,以生成语法单位还包括:对所述待处理程序代码进行解析,以判断所述待处理程序代码是否符合语法规则;响应于所述待处理程序代码不符合语法规则,输出代码异常警告。
在本公开的另一个实施例中,所述根据所述脚本源代码生成抽象语法树包括:对所述语法单位进行位置分析,以向所述语法单位对应的脚本源代码配置位置信息;以及根据所述位置信息确定脚本源代码的组合顺序,以生成抽象语法树。
在本公开的又一个实施例中,所述根据所述位置信息确定脚本源代码的组合顺序,以生成抽象语法树包括:将所述表达式和语法元素对应的脚本源代码与语法树的结构进行匹配,以生成第一抽象语法树。
在本公开的再一个实施例中,所述根据所述位置信息确定脚本源代码的组合顺序,以生成抽象语法树还包括:将所述声明或语句对应的脚本源代码与语法树的结构进行匹配,以生成声明或语句对应的抽象语法树;以及将所述声明或语句对应的抽象语法树与第一抽象语法树连接,以生成第二抽象语法树。
在本公开的一个实施例中,所述根据所述位置信息确定脚本源代码的组合顺序,以生成抽象语法树还包括:对所述第二抽象语法树配置外部定义和命名空间;以及在所述第二抽象语法树的最外层结构加入立即执行函数结构,以得到所述待处理程序代码对应的抽象语法树。
在本公开实施方式的第二方面中,提供了一种设备,包括:处理器;以及存储器,其存储有用于对高级语言进行解析的计算机指令,当所述计算机指令由所述处理器运行时,使得所述设备执行根据前文以及下文多个实施例所述的解析方法。
在本公开实施方式的第三方面中,提供了一种计算机可读存储介质,包含用于对高级语言进行解析的程序指令,当所述程序指令由处理器执行时,使得实现根据前文以及下文多个实施例所述的解析方法。
根据本公开实施方式的高级语言的解析方案,能够将由高级语言编写的程序代码转换为脚本源代码,从而生成对应的抽象语法树,不需要采用编译器、解析器等进行复杂的转换过程,能够在浏览器中直接运行高级语言编写的程序代码,从而有效减小了在线编程过程中高级语言的中间转化成本,提升了该在线编程方式应用的灵活度,为用户带来了更好的体验。
在本公开的一些实施例中,在对待处理程序代码进行分割时,可以对语法元素单元进行检查,从而修正语法元素单元的结构,以实现更加准确和高效地转换过程。
在本公开的另一些实施例中,还可以根据语法规则对待处理程序代码进行解析,并在检测出不符合语法规则的待处理程序代码时输出告警,从而有效保证了高级语言转换、编译过程的准确性和可靠性。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,其中:
图1示意性地示出了适于实现本公开实施方式的示例性计算系统100的框图;
图2示意性地示出了根据本公开另一实施例的高级语言的解析方法的流程图;
图3示意性地示出了根据本公开又一实施例的高级语言的解析方法的流程图;
图4示意性地示出了根据本公开再一实施例的高级语言的解析方法的流程图;
图5示意性地示出了根据本公开实施例的设备的示意框图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本公开的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本公开,而并非以任何方式限制本公开的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
图1示出了适于实现本公开实施方式的示例性计算系统100的框图。如图1所示,计算系统100可以包括:中央处理单元(CPU)101、随机存取存储器(RAM)102、只读存储器(ROM)103、系统总线104、硬盘控制器105、键盘控制器106、串行接口控制器107、并行接口控制器108、显示控制器109、硬盘110、键盘111、串行外部设备112、并行外部设备113和显示器114。这些设备中,与系统总线104耦合的有CPU 101、RAM 102、ROM 103、硬盘控制器105、键盘控制器106、串行控制器107、并行控制器108和显示控制器109。硬盘110与硬盘控制器105耦合,键盘111与键盘控制器106耦合,串行外部设备112与串行接口控制器107耦合,并行外部设备113与并行接口控制器108耦合,以及显示器114与显示控制器109耦合。应当理解,图1所述的结构框图仅仅是为了示例的目的,而不是对本公开范围的限制。在某些情况下,可以根据具体情况增加或减少某些设备。
本领域技术技术人员知道,本公开的实施方式可以实现为一种系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本公开还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是,但不限于,电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举示例)例如可以包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络(包括局域网(LAN)或广域网(WAN))连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
下面将参照本公开实施例的方法的流程图和设备(或系统)的框图描述本公开的实施方式。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置的产品。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
根据本公开的实施方式,提出了一种高级语言的解析方法、设备和计算机可读存储介质。此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
下面参考本公开的若干代表性实施方式,详细阐释本公开的原理和精神。
发明概述
本发明人发现,目前在浏览器中编程时,并不支持直接执行C++或Java等高级语言,需要将其通过编译过程转化为机器能够识别的语言。然而目前所采用的中间转化方式借助服务器或需要编程人员学习对应的程序语言,其成本和对编程人员的要求都比较高。
基于此,为了使浏览器能够直接执行C++等代码,需要将其转化成浏览器支持的语言以达到相应执行结果。除了执行结果,在线教学中还需要支持对代码的单步执行的过程操作控制。本发明人通过对高级语言编程的执行过程进行分析,发现代码的执行过程中实际上会通过解析器解析成抽象语法树再解释执行,如果能够分析C++代码等并生成基于脚本语言的抽象语法树,其实就能达到间接执行C++代码等高级语言编写的程序的目的。脚本语言,如Python(面向对象、直译式程序设计语言),TCL(Tool CommandLanguage,脚本语言)等,又称动态语言,其是一种解释性的语言,不需要编译,可直接运行。脚本语言由解释器来负责解释执行,易掌握,具备良好的快速开发效率,在自动化测试领域应用广泛。
本公开中通过将C++等高级语言编写的程序代码转换为脚本源代码,并对应生成基于脚本语言的抽象语法树,实现了直接解析C++等高级语言的过程,有效降低了前端项目程序接入的复杂度,并提升了在线编程等应用的灵活性。
在介绍了本公开的基本原理之后,下面具体介绍本公开的各种非限制性实施方式。
示例性方法
下面参考图2来描述根据本公开示例性实施方式的高级语言的解析方法。需要注意的是,上述应用场景仅是为了便于理解本公开的精神和原理而示出,本公开的实施方式在此方面不受任何限制。相反,本公开的实施方式可以应用于适用的任何场景。
图2示意性地示出了根据本公开另一实施例的高级语言的解析方法200的流程图。
如图2所示,在步骤S201处,获取由高级语言编写的待处理程序代码。在一些实施例中,可以将parse函数作为接入口,利用parse函数对待处理程序代码进行分析和转化。需要说明的是,该高级语言编写的待处理程序代码,可以基于任何高级语言进行编写。本公开中仅为了示例性说明,对采用C++编写的待处理程序代码进行处理。
接着,在步骤S202处,根据语法对应关系将待处理程序代码转换为脚本源代码。该语法对应关系包括高级语言与脚本语言的语法对应关系。例如,C++语言和JavaScript之间的语法对应关系。
接着,在步骤S203处,根据脚本源代码生成抽象语法树。该抽象语法树可以以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。而且脚本语言具有不需要编译可直接运行的优点。在一些实施例中,将脚本源代码生成抽象语法树,就可以直接运行并获取执行结果。由此实现了以C++编写的待处理程序代码直接向基于脚本语言的抽象语法树的转化过程,从而有效降低了前端项目开发的复杂度,而且可以直接在浏览器端完成C++代码的解析过程,提升了在线编程应用的灵活性。
接下来将结合其他附图对上述各个步骤的示例性实现方式进行说明。
图3示意性地示出了根据本公开又一实施例的高级语言的解析方法300的流程图。需要说明的是,该方法300可以理解为是图1中的解析方法200的步骤S202和步骤203的一种可能的示例性实现。因此,前文结合图2中的相关描述同样也适用于下文。
如图3所示,在步骤S301处,将所述待处理程序代码进行分割,以生成语法单位。其中该语法单位包括以下任一或多项:语法元素单元、表达式、声明或语句、外部定义、命名空间和函数入口。由于高级语言编写的程序代码中,存在不同层级的结构,可以将其进行分割,以生成相应的语法单位,从而便于对待处理程序进行分层级处理和转化。
具体地,上述各语法单位中,语法元素单元包括以下一项或多项:标点符号、常量和关键字。表达式包括以下一项或多项:赋值表达式、自增表达式和自减表达式。声明包括函数声明。语句包括判断语句和循环语句。
以分割成语法元素单元为例,可以将待处理程序代码进行识别,以确定语法元素。然后对待处理程序代码进行分割,并将相同的语法元素进行组合以生成语法元素单元。进一步,为了保证转换过程的正确性,还可以对语法元素单元进行检查,以修正语法元素单元。
在步骤S302处,根据语法对应关系将语法单位转换为对应的脚本源代码。在一些实施例中,可以根据高级语言的语言特点和脚本语言的语言特点建立相应的语法对应关系。根据语法对应关系,可以将相应的语法单位进行转换,从而得到对应的脚本源代码,便于后续返回json数据格式的抽象语法树的描述。
在步骤S303处,对语法单位进行位置分析,以向语法单位对应的脚本源代码配置位置信息。在一些实施例中,一个待处理程序代码中可能包括符号、常量、表达式、逻辑语句等多层次的结构,每个语句的执行也存在相应的顺序。基于此,可以对语法单位进行位置分析,以将不同的语句与抽象语法树中的位置进行匹配,然后将转换后的脚本源代码填入对应层次结构的列表中,例如网页中的<body>标签中。
在步骤S304处,根据位置信息确定脚本源代码的组合顺序,以生成抽象语法树。在一些实施例中,根据位置关系可以确定脚本源代码中各语句的组合关系,从而可以通过不同层次结构的添加过程,逐层次构建抽象语法树。可以理解的是,在构建抽象语法树时,可以从“枝干”向“根”级构建,即先填入最基本的变量、表达式语句对应的抽象语法树,再逐步构建逻辑语句、声明和函数入口等对应的抽象语法树结构。
进一步,为了保证转换过程的正确性,在将待处理程序代码进行分割之前,还可以对待处理程序代码进行解析,以判断待处理程序代码是否符合语法规则。响应于该待处理程序代码不符合语法规则,输出代码异常警告。
图4示意性地示出了根据本公开再一实施例的高级语言的解析方法400的流程图。需要说明的是,该方法400可以理解为是图1中的解析方法200的一种可能的示例性实现。因此,前文结合图2中的相关描述同样也适用于下文。
以下列代码为例:
Figure BDA0003694337540000111
将这段代码分为4部分,第1部分为:a=i+1;第2部分为:for(int i=1;i<=5;i++){};第3部分为:int a=1;第4部分为:int main{}。下列步骤在每次匹配过程中都会在通过位置分析(例如addPositionInfo方法)返回当前代码匹配的字符位置。
如图4所示,在步骤S401处,将表达式和语法元素对应的脚本源代码与语法树的结构进行匹配,以生成第一抽象语法树。根据该方法可以生成下述对应的抽象语法树结构代码:
Figure BDA0003694337540000112
Figure BDA0003694337540000121
上述分割后的第1部分:a=i+1,通过表达式和语法元素对应的脚本源代码进行语法结构匹配,将生成如下抽象语法树(json格式)结构:left为等号左侧描述,right为等号右侧描述,并添加到body列表(网页中的标签)中。
在步骤S402处,将声明或语句对应的脚本源代码与语法树的结构进行匹配,以生成声明或语句对应的抽象语法树。for循环语句通过语法结构匹配成for循环声明结构,将生成抽象语法树(json)结构,并添加到上一层结构body列表中。
在步骤S403处,将声明或语句对应的抽象语法树与第一抽象语法树连接,以生成第二抽象语法树。下述代码中说明了声明或语句对应的脚本源代码生成对应的抽象语法树的过程。
Figure BDA0003694337540000122
Figure BDA0003694337540000131
可以看出,结构内init为int=1语句匹配返回语法树结构,test为i<=5语句匹配返回语法树结构,undate为i++语句匹配返回语法树结构,body内元素为1时,返回声明对应的语法树结构。
接着,针对第三部分int a=1进行语法结构匹配,将生成如下抽象语法树(json)结构,并添加到更上一层结构body列表中。
Figure BDA0003694337540000132
再接着,进行第4部分的int main声明结构匹配,将生成如下抽象语法树(json)结构并添加到上层,如下代码中可以看出上述第2部分和第3部分被添加到body中。
Figure BDA0003694337540000133
Figure BDA0003694337540000141
在步骤S404处,对第二抽象语法树配置外部定义和命名空间。例如由C++编写的待处理程序代码中的全局变量等,通过对应脚本原代码匹配过程,对第二抽象语法树配置相应的外部定义和命名空间。
在步骤S405处,在第二抽象语法树的最外层结构加入立即执行函数结构,以得到待处理程序代码对应的抽象语法树。此步骤将生成根级抽象语法树结构,上述第4部分将被作为第二个元素加入到body列表(网页中的标签)中。由于转成脚本语言对应的抽象语法树后需要立即执行,所以在main函数同级语法描述body中增加了执行main函数声明的语法树。该生成的抽象语法树描述如下:
Figure BDA0003694337540000142
Figure BDA0003694337540000151
需要说明的是,上述从语法元素到最外层的立即执行函数生成抽象语法树的执行顺序仅仅是示例性的,而非限制性的,本领域技术人员还可以根据实际需要按照其他的顺序进行构建。例如可以先建立函数声明,然后再逐步填入表达式和逻辑语句对应的抽象语法树结构,以实现逐层构建过程。
示例性设备
图5示意性地示出了根据本公开实施例的设备500的示意框图。如图5所示,设备500可以包括处理器501和存储器502。其中存储器502存储有用于对高级语言进行解析的计算机指令,当所述计算机指令由处理器501运行时,使得设备500执行根据前文结合图2至图4所描述的方法。例如,在一些实施例中,设备500可以执行对由高级语言编写的待处理程序代码进行分割、定位、组合和语法转换等。基于此,通过设备500可以有效提高编程应用的灵活性,为前端开发提供便利,显著降低了前端项目程序接入的复杂度。
在一些实施场景中,设备500可以应用于服务端、node.js和浏览器端等环境中,具有较高的灵活性。本公开的方案对设备500可具备的结构设计并不进行限制。进一步,还可以根据功能将上述设备500划分为多个单元模块,以实现相应的功能。
应当注意,尽管在上文详细描述中提及了设备的若干装置或子装置,但是这种划分仅仅并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多装置的特征和功能可以在一个装置中具体化。反之,上文描述的一个装置的特征和功能可以进一步划分为由多个装置来具体化。
此外,尽管在附图中以特定顺序描述了本公开方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。相反,流程图中描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
申请文件中提及的动词“包括”、“包含”及其词形变化的使用不排除除了申请文件中记载的那些元素或步骤之外的元素或步骤的存在。元素前的冠词“一”或“一个”不排除多个这种元素的存在。
虽然已经参考若干具体实施方式描述了本公开的精神和原理,但是应该理解,本公开并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本公开旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。所附权利要求的范围符合最宽泛的解释,从而包含所有这样的修改及等同结构和功能。

Claims (10)

1.一种高级语言的解析方法,其特征在于,包括:
获取由高级语言编写的待处理程序代码;
根据语法对应关系将所述待处理程序代码转换为脚本源代码,所述语法对应关系包括高级语言与脚本语言的语法对应关系;以及
根据所述脚本源代码生成抽象语法树。
2.根据权利要求1所述的解析方法,其特征在于,所述根据语法对应关系将所述待处理程序代码转换为脚本源代码包括:
将所述待处理程序代码进行分割,以生成语法单位,其中所述语法单位包括以下任一或多项:语法元素单元、表达式、声明或语句、外部定义、命名空间和函数入口;以及
根据语法对应关系将所述语法单位转换为对应的脚本源代码。
3.根据权利要求2所述的解析方法,其特征在于,其中语法元素单元包括以下一项或多项:标点符号、常量和关键字;表达式包括以下一项或多项:赋值表达式、自增表达式和自减表达式;声明包括函数声明;语句包括判断语句和循环语句。
4.根据权利要求2所述的解析方法,其特征在于,其中将所述待处理程序代码进行分割,以生成语法元素单元包括:
将所述待处理程序代码进行识别,以确定语法元素;以及
对所述待处理程序代码进行分割,并将相同的语法元素进行组合以生成语法元素单元。
5.根据权利要求2所述的解析方法,其特征在于,所述根据所述脚本源代码生成抽象语法树包括:
对所述语法单位进行位置分析,以向所述语法单位对应的脚本源代码配置位置信息;以及
根据所述位置信息确定脚本源代码的组合顺序,以生成抽象语法树。
6.根据权利要求5所述的解析方法,其特征在于,所述根据所述位置信息确定脚本源代码的组合顺序,以生成抽象语法树包括:
将所述表达式和语法元素对应的脚本源代码与语法树的结构进行匹配,以生成第一抽象语法树。
7.根据权利要求6所述的解析方法,其特征在于,所述根据所述位置信息确定脚本源代码的组合顺序,以生成抽象语法树还包括:
将所述声明或语句对应的脚本源代码与语法树的结构进行匹配,以生成声明或语句对应的抽象语法树;以及
将所述声明或语句对应的抽象语法树与第一抽象语法树连接,以生成第二抽象语法树。
8.根据权利要求7所述的解析方法,其特征在于,所述根据所述位置信息确定脚本源代码的组合顺序,以生成抽象语法树还包括:
对所述第二抽象语法树配置外部定义和命名空间;以及
在所述第二抽象语法树的最外层结构加入立即执行函数结构,以得到所述待处理程序代码对应的抽象语法树。
9.一种设备,其特征在于,包括:
处理器;以及
存储器,其存储有用于对高级语言进行解析的计算机指令,当所述计算机指令由所述处理器运行时,使得所述设备执行根据权利要求1-8的任意一项所述的解析方法。
10.一种计算机可读存储介质,其特征在于,包含用于对高级语言进行解析的程序指令,当所述程序指令由处理器执行时,使得实现根据权利要求1-8的任意一项所述的解析方法。
CN202210674693.7A 2022-06-14 2022-06-14 一种高级语言的解析方法、设备和计算机可读存储介质 Pending CN115145575A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210674693.7A CN115145575A (zh) 2022-06-14 2022-06-14 一种高级语言的解析方法、设备和计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210674693.7A CN115145575A (zh) 2022-06-14 2022-06-14 一种高级语言的解析方法、设备和计算机可读存储介质

Publications (1)

Publication Number Publication Date
CN115145575A true CN115145575A (zh) 2022-10-04

Family

ID=83408676

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210674693.7A Pending CN115145575A (zh) 2022-06-14 2022-06-14 一种高级语言的解析方法、设备和计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN115145575A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117075912A (zh) * 2023-10-16 2023-11-17 芯行纪科技有限公司 用于程序语言转换的方法、编译方法及相关设备

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117075912A (zh) * 2023-10-16 2023-11-17 芯行纪科技有限公司 用于程序语言转换的方法、编译方法及相关设备
CN117075912B (zh) * 2023-10-16 2023-12-26 芯行纪科技有限公司 用于程序语言转换的方法、编译方法及相关设备

Similar Documents

Publication Publication Date Title
US20190361802A1 (en) Semantic comparison of computer compiler traces
US8601453B2 (en) COBOL to bytecode translation
US8099721B2 (en) Parsing of declarations in all branches of preprocessor conditionals
US20190317882A1 (en) Method and apparatus for testing a code file
US20110314337A1 (en) Method and Apparatus for Locating Input-Model Faults Using Dynamic Tainting
CN112286814A (zh) 一种测试用例脚本的自动化生成系统及方法
CN110096264A (zh) 一种代码运行方法及装置
KR102546424B1 (ko) 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법
CN116166236A (zh) 代码推荐方法、装置、计算机设备及存储介质
CN115145575A (zh) 一种高级语言的解析方法、设备和计算机可读存储介质
CN115066674A (zh) 使用源代码元素的数值数组表示来评估源代码的方法
CN116149671B (zh) 用于翻译智能合约语言的方法和装置、电子设备
CN109359055B (zh) 一种数据测试的方法和设备
CN110286912B (zh) 代码检测方法、装置及电子设备
CN110989998A (zh) 动态sql语句写入代码的方法、程序代码执行方法及平台
US11604774B2 (en) Method and apparatus of converting schema in deep learning framework, and computer storage medium
US11119740B2 (en) Parsability of code snippets
CN115629762A (zh) 一种json数据处理方法、装置、电子设备及存储介质
CN114895914A (zh) 日志输出代码的生成方法、装置、电子设备及存储介质
CN113448874A (zh) 一种单元测试脚本的生成方法及装置
Piñeiro et al. Perldoop2: A big data-oriented source-to-source Perl-Java compiler
MaIm et al. Static flow analysis of the Action Language for Foundational UML
US20220197617A1 (en) Idiomatic Source Code Generation
CN117215561A (zh) 代码生成方法和装置、电子设备
Tanoue et al. Prototype of Refactoring Support Tool MCC Focusing on the Naming of Variables

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