编程语言的解析方法及装置、非易失性存储介质制造方法及图纸

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

【技术实现步骤摘要】
编程语言的解析方法及装置、非易失性存储介质


[0001]本申请涉及软件领域,具体而言,涉及一种编程语言的解析方法及装置、非易失性存储介质。

技术介绍

[0002]图1是目前高级编程语言的编译运行过程的示意图,如图1所示,高级语言的编译运行过程,涉及到图1所示的三种形式:a)编译型语言(如C语言),源代码通过编译器生成二进制可执行程序,由机器直接执行;b)第一种解释型语言(如Java语言),源代码通过解释器转化为中间代码(如字节码),在虚拟机中解释执行;c)第二种解释型语言(如Lisp语言),源代码通过解释器直接解释执行。
[0003]编译器是一种将源语言程序(通常为高级语言)翻译为目标语言(通常指二进制数表示的机器语言)写成的程序。图2是编译器的运行过程流程图,如图2所示,整个编译过程如图2所示,大致可分为6个阶段:语法分析、语义分析、中间代码产生、代码优化及目标代码生产。
[0004]图3是解释器的运行过程流程图,如图3所示,解释器是一种将源代码解释执行的程序。整个解释过程大致可分为4个阶段,包括:词法分析、语法分析、语义分析、中间代码生成或直接解释执行。
[0005]1)词法分析器,对构成源程序的字符流进行扫描,即从左到右一个字符一个字符地读入源程序,然后根据构词规则识别单词(也称单词符号或符号),重新组织为词法单元列表。
[0006]2)语法分析器,使用由词法分析得到的各个词法单元的第一个分量来创建语法树,其中树中的每个内部结点表示一个运算,而该结点的子结点表示该运算的分量。语法分析是一个逻辑阶段,判断源程序在结构上是否正确。
[0007]3)语义分析器,使用语法树和符号表中的信息来检查源程序是否和语言定义的语义一致。同时收集类型信息,并生成抽象语法树。语义分析是一个逻辑阶段,对结构上正确的源程序进行上下文有关性质的审查,主要是类型检查。
[0008]现有解释器在处理一般编程语言,如Lisp语言,是足够的,但处理数值计算编程语言时则有所不足。数值计算语言会引入更多的数学符号,从而导致一些符号具有多义,即源代码中具有歧义代码。比如,源代码中的单引号

既可以表示字符的开始或结束,又可以用来表示矩阵的转置。当单引号表示字符的开始或结束时,其类型为界限符;当单引号表示矩阵的转置时,其类型为运算符。单引号作为不同类型时,生产的语法树和抽象语法树具有本质区别。在现有解释器的架构基础上,解释器只会把单引号当做固定的一种类型处理,从而导致错误结果。
[0009]针对数值计算编程语言引入的数学符号具有多义导致解释器处理数值计算编程语言时容易出错的问题,目前尚未提出有效的解决方案。

技术实现思路

[0010]本申请实施例提供了一种编程语言的解析方法及装置、非易失性存储介质,以至少解决数值计算编程语言引入的数学符号具有多义导致解释器处理数值计算编程语言时容易出错的技术问题。
[0011]根据本申请实施例的一个方面,提供了一种编程语言的解析方法,包括:将源代码识别为字符流,并将字符流解析为词法单元列表,其中,词法单元列表中包括多个词法单元;将多个词法单元分为第一类词法单元和第二类词法单元,其中,第一类词法单元为包括歧义符号的词法单元,第二类词法单元为不包括歧义符号的词法单元;将第一类词法单元转换为第二类词法单元;对由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元进行解析。
[0012]可选地,将多个词法单元分为第一类词法单元和第二类词法单元,包括:获取多个词法单元的符号名;从符号名中确定出具有歧义的目标符号名;将目标符号名所属的词法单元确定为第一类词法单元,将符号名中除目标符号名以外的符号名所属的词法单元确定为第二类词法单元。
[0013]可选地,将第一类词法单元转换为第二类词法单元,包括:将第一类词法单元输入至语义分析器进行解析,得到第二类词法单元;对由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元进行解析,包括:将由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元输入至语法分析器进行解析;将语法分析器对第二类词法单元的解析结果输入至语义分析器进行解析。
[0014]可选地,将第一类词法单元输入至语义分析器进行解析,得到第二类词法单元,包括:依据第一类词法单元的上下文信息,确定第一类词法单元的符号名的类型;依据第一类词法单元的符号名的类型,修改第一类词法单元的属性值,得到第二类词法单元。
[0015]可选地,将由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元输入至语法分析器进行解析,包括:将由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元组装成语法分析树。
[0016]可选地,将语法分析器对第二类词法单元的解析结果输入至语义分析器进行解析,包括:对语法分析树进行精简处理,构建抽象语法树。
[0017]可选地,将字符流解析为词法单元列表,包括:按照预设构词规则将字符流解析为词法单元列表,其中,词法单元列表中的每个词法单元包括:符号名和属性值,其中,符号名为词法单元本身,属性值为词法单元的类型。
[0018]根据本申请实施例的另一方面,还提供了一种编程语言的解析装置,包括:第一解析模块,用于将源代码识别为字符流,并将字符流解析为词法单元列表,其中,词法单元列表中包括多个词法单元;分类模块,用于将多个词法单元分为第一类词法单元和第二类词法单元,其中,第一类词法单元为包括歧义符号的词法单元,第二类词法单元为不包括歧义符号的词法单元;转换模块,用于将第一类词法单元转换为第二类词法单元;第二解析模块,用于对由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元进行解析。
[0019]根据本申请实施例的再一方面,还提供了一种非易失性存储介质,非易失性存储介质包括存储的程序,其中,在程序运行时控制非易失性存储介质所在设备执行以上的编程语言的解析方法。
[0020]根据本申请实施例的再一方面,还提供了一种处理器,处理器用于运行存储在存储器中的程序,其中,程序运行时执行以上的编程语言的解析方法。
[0021]在本申请实施例中,采用将源代码识别为字符流,并将字符流解析为词法单元列表,其中,词法单元列表中包括多个词法单元;将多个词法单元分为第一类词法单元和第二类词法单元,其中,第一类词法单元为包括歧义符号的词法单元,第二类词法单元为不包括歧义符号的词法单元;将第一类词法单元转换为第二类词法单元;对由第一类词法单元转换得到的第二类词法单元和将多个词法单元进行分类得到的第二类词法单元进行解析的方式,通过对词法分析的结果—词法单元列表进行分类处理,将具有歧义的词法单元转换为没有歧义的词法单元,达到了改进解释器处理歧义代码能力的目的,从而实现了提高解释器处理数值计算编程语言的准确度的技术效果,进而解决了数值计算编程本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种编程语言的解析方法,其特征在于,包括:将源代码识别为字符流,并将所述字符流解析为词法单元列表,其中,所述词法单元列表中包括多个词法单元;将所述多个词法单元分为第一类词法单元和第二类词法单元,其中,所述第一类词法单元为包括歧义符号的词法单元,所述第二类词法单元为不包括歧义符号的词法单元;将所述第一类词法单元转换为所述第二类词法单元;对由所述第一类词法单元转换得到的所述第二类词法单元和将所述多个词法单元进行分类得到的所述第二类词法单元进行解析。2.根据权利要求1所述的方法,其特征在于,将所述多个词法单元分为第一类词法单元和第二类词法单元,包括:获取所述多个词法单元的符号名;从所述符号名中确定出具有歧义的目标符号名;将所述目标符号名所属的词法单元确定为所述第一类词法单元,将所述符号名中除所述目标符号名以外的符号名所属的词法单元确定为所述第二类词法单元。3.根据权利要求1所述的方法,其特征在于,将所述第一类词法单元转换为所述第二类词法单元,包括:将所述第一类词法单元输入至语义分析器进行解析,得到所述第二类词法单元;对由所述第一类词法单元转换得到的所述第二类词法单元和将所述多个词法单元进行分类得到的所述第二类词法单元进行解析,包括:将由所述第一类词法单元转换得到的所述第二类词法单元和将所述多个词法单元进行分类得到的所述第二类词法单元输入至语法分析器进行解析;将所述语法分析器对所述第二类词法单元的解析结果输入至所述语义分析器进行解析。4.根据权利要求3所述的方法,其特征在于,将所述第一类词法单元输入至语义分析器进行解析,得到所述第二类词法单元,包括:依据所述第一类词法单元的上下文信息,确定所述第一类词法单元的符号名的类型;依据所述第一类词法单元的符号名的类型,修改所述第一类词法单元的属性值,得到所述第二类词法单元。5.根据权利要求3所述的方法,...

【专利技术属性】
技术研发人员:李若卢眺
申请(专利权)人:北京大学重庆大数据研究院
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1