CN110673854A - Sas语言编译方法、装置、设备及可读存储介质 - Google Patents

Sas语言编译方法、装置、设备及可读存储介质 Download PDF

Info

Publication number
CN110673854A
CN110673854A CN201910909667.6A CN201910909667A CN110673854A CN 110673854 A CN110673854 A CN 110673854A CN 201910909667 A CN201910909667 A CN 201910909667A CN 110673854 A CN110673854 A CN 110673854A
Authority
CN
China
Prior art keywords
code
macro
language
intermediate code
sas
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
CN201910909667.6A
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.)
WeBank Co Ltd
Original Assignee
WeBank 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 WeBank Co Ltd filed Critical WeBank Co Ltd
Priority to CN201910909667.6A priority Critical patent/CN110673854A/zh
Publication of CN110673854A publication Critical patent/CN110673854A/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
    • 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/44Encoding
    • G06F8/447Target code generation

Landscapes

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

Abstract

本发明公开了一种SAS语言编译方法、装置、设备和可读存储介质,所述SAS语言编译方法包括:接收SAS代码,并将所述SAS代码输入预设预处理语法分析器,输出第一中间代码,将所述第一中间代码输入预设宏语言语法分析器中,以对所述第一中间代码中的宏语言进行解析,输出第二中间代码,将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的数据步与过程步进行解析,输出目标代码。解决了现有技术中语言转化开发与维护困难的技术问题。

Description

SAS语言编译方法、装置、设备及可读存储介质
技术领域
本发明涉及金融科技的语言转换技术领域,尤其涉及一种SAS语言编译方法、装置、设备及可读存储介质。
背景技术
随着金融科技,尤其是互联网科技金融的不断发展,越来越多的技术(如分布式、区块链Blockchain、人工智能等)应用在金融领域,但金融业也对技术提出了更高的要求,如对金融业对应待办事项的分发也有更高的要求。
随着软件行业的蓬勃发展,编程语言的类型也越来越多,在日常的软件编程开发中,往往需要涉及到将源语言转化为另一种语言,来实现源语言的功能,目前,在现有技术中通常通过词法语法对源语言进行分析,生成中间代码,进而对中间代码进行多层优化,生成机器码表示的目标代码,但是该语言转化方法的开发工程量大,导致开发进度缓慢,进而导致语言转化开发困难,且最后生成的机器码难以阅读,导致机器码的维护也较为困难,所以,现有技术中存在语言转化开发与维护困难的技术问题。
发明内容
本发明的主要目的在于提供一种SAS语言编译方法、装置、设备和可读存储介质,旨在解决现有技术中语言转化开发与维护困难的技术问题。
为实现上述目的,本发明实施例提供一种SAS语言编译方法,所述SAS语言编译方法应用于SAS语言编译设备,所述SAS语言编译方法包括:
接收SAS代码,并将所述SAS代码输入预设预处理语法分析器,输出第一中间代码;
将所述第一中间代码输入预设宏语言语法分析器中,以对所述第一中间代码中的宏语言进行解析,输出第二中间代码;
将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的数据步与过程步进行解析,输出目标代码。
可选地,所述预设宏语言语法分析器包括宏语法分析器、宏变量取值分析器和宏函数调用语法分析器,
所述将所述第一中间代码输入预设宏语言语法分析器中,以对所述第一中间代码中的宏语言进行解析,输出第二中间代码的步骤包括:
将所述第一中间代码输入所述宏语法分析器,对所述第一中间代码中的宏语法进行解析,获得第一宏阶段代码;
将所述第一宏阶段代码输入所述宏变量取值分析器,对所述第一宏阶段代码中的宏变量进行解析,获得第二宏阶段代码;
将所述第二宏阶段代码输入宏函数调用语法分析器,对所述第二宏阶段代码中的宏函数进行解析,获得所述第二中间代码。
可选地,所述第一中间代码包括宏定义和宏控制语句,
所述将所述第一中间代码输入所述宏语法分析器,对所述第一中间代码中的宏语法进行解析,获得第一宏阶段代码的步骤包括:
将所述第一中间代码输入所述宏语法分析器,以基于预设语法模式识别所述宏定义和宏控制语句;
对所述宏定义和宏控制语句进行语言转换,生成所述宏定义和宏控制语句对应的python语言,获得宏语法处理代码;
将所述宏语法处理代码与预设固定语句进行拼接,获得所述第一宏阶段代码。
可选地,所述将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的数据步与过程步进行解析,输出目标代码的步骤包括:
将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的注释语句进行选择性过滤;
对过滤后的所述第二中间代码进行队列匹配,获得一个或者多个代码队列;
对各所述代码队列进行语法解析,获得所述目标代码。
可选地,所述预设数据与过程步语法分析器包括第二中间代码词法分析器和第二中间代码语法分析器,
所述对各所述代码队列进行语法解析,获得所述目标代码的步骤包括:
通过所述第二中间代码词法分析器将所述队列中的字符转化为词法符号,并将各所述词法符号发送给所述第二中间代码语法分析器;
通过所述第二中间代码语法分析器对各所述词法符号进行识别,获得语法节点;
基于所述语法节点,合成语法分析树,并遍历所述语法分析树的各所述语法节点,获得所述目标代码。
可选地,所述语法节点包括数据步节点,所述第二中间代码包括数据步代码,
所述遍历所述语法分析树的各所述语法节点,获得所述目标代码的步骤包括:
当对所述数据步节点进行遍历时,基于所述数据步节点中的数据步实现流程,对所述数据步代码进行流程模拟;
通过预设语言运行时库对所述流程模拟的步骤进行句型匹配,获得所述目标代码。
可选地,所述语法节点包括过程步节点,所述第二中间代码包括过程步代码,
所述遍历所述语法分析树的各所述语法节点,获得所述目标代码的步骤包括:
当对所述过程步节点进行遍历时,判断所述过程步代码中是否存在其他数据处理语言语句;
当所述过程步代码中存在所述其他数据处理语言语句时,则调用预设数据管理与分析语言语法分析器对所述其他数据处理语言语句进行语法解析,并向所述预设数据与过程步语法分析器返回数据管理与分析语言解析结果;
对所述第二中间代码进行语法解析,并基于所述数据管理与分析语言解析结果输出所述目标代码。
本发明还提供一种SAS语言编译装置,所述SAS语言编译装置应用于SAS语言编译设备,所述SAS语言编译装置包括:
预处理模块,用于所述接收SAS代码,并将所述SAS代码输入预设预处理语法分析器,输出第一中间代码;
宏阶段模块,用于所述将所述第一中间代码输入预设宏语言语法分析器中,以对所述第一中间代码中的宏语言进行解析,输出第二中间代码;
数据与过程步模块,用于所述将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的数据步与过程步进行解析,输出目标代码。
可选地,所述宏阶段模块包括:
宏语法子模块,用于所述将所述第一中间代码输入所述宏语法分析器,对所述第一中间代码中的宏语法进行解析,获得第一宏阶段代码;
宏变量取值子模块,用于所述将所述第一宏阶段代码输入所述宏变量取值分析器,对所述第一宏阶段代码中的宏变量进行解析,获得第二宏阶段代码;
宏函数调用子模块,用于所述将所述第二宏阶段代码输入宏函数调用语法分析器,对所述第二宏阶段代码中的宏函数进行解析,获得所述第二中间代码。
可选地,所述宏语法子模块包括:
输入单元,用于所述将所述第一中间代码输入所述宏语法分析器,以基于预设语法模式识别所述宏定义和宏控制语句;
宏语法单元,用于所述对所述宏定义和宏控制语句进行语言转换,生成所述宏定义和宏控制语句对应的python语言,获得宏语法处理代码;
拼接单元,用于所述将所述宏语法处理代码与预设固定语句进行拼接,获得所述第一宏阶段代码。
可选地,所述数据与过程步模块包括:
过滤子模块,用于所述将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的注释语句进行选择性过滤;
队列匹配子模块,用于所述对过滤后的所述第二中间代码进行队列匹配,获得一个或者多个代码队列;
语法解析子模块,用于所述对各所述代码队列进行语法解析,获得所述目标代码。
可选地,所述语法解析子模块包括:
词法分析单元,用于所述通过所述第二中间代码词法分析器将所述队列中的字符转化为词法符号,并将各所述词法符号发送给所述第二中间代码语法分析器;
节点识别单元,用于所述通过所述第二中间代码语法分析器对各所述词法符号进行识别,获得语法节点;
遍历单元,用于所述基于所述语法节点,合成语法分析树,并遍历所述语法分析树的各所述语法节点,获得所述目标代码。
可选地,所述遍历单元包括:
流程模拟子单元,用于所述当对所述数据步节点进行遍历时,基于所述数据步节点中的数据步实现流程,对所述数据步代码进行流程模拟;
句型匹配子单元,用于所述通过预设语言运行时库对所述流程模拟的步骤进行句型匹配,获得所述目标代码。
可选地,所述遍历单元包括:
判断子单元,用于所述当对所述过程步节点进行遍历时,判断所述过程步代码中是否存在其他数据处理语言语句;
解析子单元,用于所述当所述过程步代码中存在所述其他数据处理语言语句时,则调用预设数据管理与分析语言语法分析器对所述其他数据处理语言语句进行语法解析,并向所述预设数据与过程步语法分析器返回数据管理与分析语言解析结果;
输出子单元,用于所述对所述第二中间代码进行语法解析,并基于所述数据管理与分析语言解析结果输出所述目标代码。
本发明还提供一种SAS语言编译设备,所述SAS语言编译设备包括:存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的所述SAS语言编译方法的程序,所述SAS语言编译方法的程序被处理器执行时可实现如上述的SAS语言编译方法的步骤。
本发明还提供一种可读存储介质,所述可读存储介质为计算机可读存储可读存储介质,且所述可读存储介质上存储有实现SAS语言编译方法的程序,所述SAS语言编译方法的程序被处理器执行时实现如上述的SAS语言编译方法的步骤。
本申请通过接收SAS代码,并将所述SAS代码输入预设预处理语法分析器,输出第一中间代码,进而将所述第一中间代码输入预设宏语言语法分析器中,以对所述第一中间代码中的宏语言进行解析,输出第二中间代码,最后将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的数据步与过程步进行解析,输出目标代码。也即,本申请首先通过接收用户输入的SAS代码,并将所述SAS代码输入预设预处理语法分析器,进行第一中间代码的获取,进而将所述第一中间代码输入预设宏语言语法分析器中,进行第二中间代码的获取,最后将所述第二中间代码输入预设数据与过程步语法分析器中,进行所述目标代码的获取。也即,本申请只需通过预设预处理语法分析器、预设宏语言语法分析器和预设数据与过程步语法分析器对SAS代码中的宏语言、数据步和过程步分别进行语法解析,则可获得所述目标代码,所以,本申请SAS语言编译方法在进行语言转化时,开发人员开发工作量小,且所述目标代码并不局限于机器码,易于阅读和维护,所以,解决了现有技术中语言转化开发与维护困难的技术问题。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明SAS语言编译方法第一实施例的流程示意图;
图2为本发明SAS语言编译方法中过程步语法分析器语法分析树的示意图;
图3为本发明SAS语言编译方法第二实施例的流程示意图;
图4为本发明SAS语言编译方法中数据步实现流程的示意图;
图5为本发明SAS语言编译方法第二实施例集合第一实施例的一种实施方式的流程示意图;
图6是本发明实施例方法涉及的硬件运行环境的设备结构示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供一种SAS语言编译方法,所述SAS语言编译方法应用于SAS语言编译设备,在本申请SAS语言编译方法的第一实施例中,参照图1,所述SAS语言编译方法包括:
步骤S10,接收SAS代码,并将所述SAS代码输入预设预处理语法分析器,输出第一中间代码;
在本实施例中,需要说明的是,所述SAS语言编译方法是在大数据计算引擎框架下实现的,所述预设预处理语法分析器包括SAS代码词法分析器和SAS代码语法分析器,其中,SAS代码词法分析器与SAS代码语法分析器是通过自定义的多个语法文件,采用自动化语言识别工具ANTLR工具生成的,所述SAS代码是以字符串的形式输入到预设预处理语法分析器中的,所述SAS语言为一种专用的数据管理与分析语言,它的数据管理功能类似于数据库语言,但又添加了一般高级程序设计语言的许多特点,如条件判断,循环等,以及专用于数据分析与统计的函数与模型。
接收SAS代码,并将所述SAS代码输入预设预处理语法分析器,输出第一中间代码,具体地,接收用户输入的SAS代码,并将所述SAS代码输入预设预处理语法分析器,以通过所述SAS代码词法分析器将所述SAS代码中的字符转化为SAS代码词法符号,进而通过所述SAS代码语法分析器将所述词法符号识别成SAS代码语法节点,合成SAS代码语法分析树,进而通过遍历所述SAS代码语法分析树中的各语法节点,对SAS代码中的部分歧义语句进行过滤与处理,获得所述第一中间代码,其中,过滤的部分歧义语句包括块注释语法/**/,处理的部分歧义语句的目的主要是识别宏函数括号后是否有分号,没有的话加上分号,以统一各语句的终止符,减少后面语法分析器的解析压力。
步骤S20,将所述第一中间代码输入预设宏语言语法分析器中,以对所述第一中间代码中的宏语言进行解析,输出第二中间代码;
在本实施例中,需要说明的是,所述预设宏语言语法分析器是通过自定义的多个语法文件,采用自动化语言识别工具ANTLR工具生成的,所述预设宏语言语法分析器包括宏语法分析器、宏变量取值分析器和宏函数调用语法分析器。
将所述第一中间代码输入预设宏语言语法分析器中,以对所述第一中间代码中的宏语言进行解析,输出第二中间代码,具体地,首先将所述第一中间代码输入宏语法分析器中,对宏语法进行识别和处理,获得第一宏阶段代码,进而将所述第一宏阶段代码输入所述宏变量取值分析器中,对所述第一宏阶段代码中的宏变量进行解析,取出宏变量中的值,获得第二宏阶段代码,最后,将所述第二宏阶段代码输入所述宏函数调用语法分析器中,对所述第二宏阶段代码中的宏函数的函数类型与传入参数进行解析,并运行函数,获得第二中间代码。
其中,所述预设宏语言语法分析器包括宏语法分析器、宏变量取值分析器和宏函数调用语法分析器,
所述将所述第一中间代码输入预设宏语言语法分析器中,以对所述第一中间代码中的宏语言进行解析,输出第二中间代码的步骤包括:
步骤S21,将所述第一中间代码输入所述宏语法分析器,对所述第一中间代码中的宏语法进行解析,获得第一宏阶段代码;
在本实施例中,需要说明的是,所述宏语法分析器包括第一中间代码词法分析器和第一中间代码语法分析器,且所述第一中间代码是以字符串的形式输入所述宏语法分析器中的。
将所述第一中间代码输入所述宏语法分析器,对所述第一中间代码中的宏语法进行解析,获得第一宏阶段代码,具体地,将所述第一中间代码输入所述宏语法分析器,通过所述第一中间代码词法分析器将所述第一中间代码中的字符转换为第一中间代码词法符号,进而通过第一中间代码语法分析器将所述第一中间代码词法符号识别成语法节点,进而合成第一中间代码语法分析树,遍历所述第一中间代码语法分析树的中各语法节点,对所述第一中间代码中的宏语法进行解析,进而获得第一宏阶段代码。
其中,所述第一中间代码包括宏定义和宏控制语句,
所述将所述第一中间代码输入所述宏语法分析器,对所述第一中间代码中的宏语法进行解析,获得第一宏阶段代码的步骤包括:
步骤S211,将所述第一中间代码输入所述宏语法分析器,以基于预设语法模式识别所述宏定义和宏控制语句;
在本实施例中,需要说明的是,需要说明的是所述预设语法模式包括宏定义和宏控制语句语法模式和其他字符语法模式。
将所述第一中间代码输入所述宏语法分析器,以基于预设语法模式识别所述宏定义和宏控制语句,具体地,将所述第一中间代码输入所述宏语法分析器,以基于所述宏定义和宏控制语句语法模式识别所述宏定义和宏控制语句,基于所述其他字符语法模式以文本形式识别和处理其他字符,其中,所述宏定义和宏控制语句包括%LET语句、%IF语句、%ELSE语句、%DO语句、%PUT语句、%DO%TO语句、%DO%WHILE语句、%DO%UNTIL语句、宏函数定义和数据与过程步语法语句等。
步骤S212,对所述宏定义和宏控制语句进行语言转换,生成所述宏定义和宏控制语句对应的python语言,获得宏语法处理代码;
在本实施例中,对所述宏定义和宏控制语句进行语言转换,生成所述宏定义和宏控制语句对应的python语言,获得宏语法处理代码,具体地,基于所述宏定义和宏控制语句与python语言语句的对应关系,对所述宏定义和宏控制语句进行语言转换,生成所述宏定义和宏控制语句对应的python语言,例如,“%DO x=1%TO 3;”宏语句转换成“for x inrange(1,4):”的python语言代码,“%macro func();”宏语句转换成“def func():”的python语言代码,进而获得宏语法处理代码,其中,所述宏语法处理代码包括所述python语言对应的字符和其他字符,对于其他字符,则会调用下一个语法分析器的接口,等待下个阶段处理。
步骤S213,将所述宏语法处理代码与预设固定语句进行拼接,获得所述第一宏阶段代码。
在本实施例中,将所述宏语法处理代码与预设固定语句进行拼接,获得所述第一宏阶段代码,具体地,将所述宏语法处理代码与预设固定语句进行拼接,其中,所述预设固定语句包括第三方模块的代码和初始化对象对应的代码等,即可构成一个完整的python程序,进一步地,由于python动态语言的特点,使用exec函数应用到生成的语句中,运行宏语法分析器输出python程序,获得所述第一宏阶段代码。
步骤S22,将所述第一宏阶段代码输入所述宏变量取值分析器,对所述第一宏阶段代码中的宏变量进行解析,获得第二宏阶段代码;
在本实施例中,需要说明的是,所述宏变量取值分析器包括第一宏阶段代码词法分析器和第一宏阶段代码语法分析器,且所述第一宏阶段代码是以字符串的形式输入所述宏语法分析器中的,其中,本实施例中在将上一个语法分析器的字符传递给下一个语法分析器时,会把上一个语法分析器中的全局变量与局部变量也传递过去,且将与下一个语法分析器的全局变量与局部变量合并一起。
将所述第一宏阶段代码输入所述宏变量取值分析器,对所述第一宏阶段代码中的宏变量进行解析,获得第二宏阶段代码,具体地,将所述第一宏阶段代码输入所述宏变量取值分析器,以通过所述第一宏阶段代码词法分析器将所述第一宏阶段代码中的字符转换为第一宏阶段代码词法符号,进而通过第一宏阶段代码语法分析器将所述第一宏阶段代码词法符号识别成语法节点,进而合成第一宏阶段代码语法分析树,进一步地,遍历所述第一宏阶段代码语法分析树的中各语法节点,判断宏变量是否定义在外层,当所述宏变量定义在外层时,则所述宏变量为全局变量,则更新并返回所述全局变量,当述宏变量未定义在外层时,则所述宏变量为局部变量,对于局部变量将不会保存,也即,对所述第一宏阶段代码中的宏变量进行解析,获得第二宏阶段代码。
步骤S23,将所述第二宏阶段代码输入宏函数调用语法分析器,对所述第二宏阶段代码中的宏函数进行解析,获得所述第二中间代码。
在本实施例中,需要说明的是,所述宏函数调用语法分析器包括第二宏阶段代码词法分析器和第二宏阶段代码语法分析器,且所述第二宏阶段代码是以字符串的形式输入宏函数调用语法分析器中的,所述宏函数调用语法分析器作用是解析宏函数的函数类型与传入参数,并运行函数,所述第二宏阶段代码对应有第二宏阶段代码语法分析树。
将所述第二宏阶段代码输入宏函数调用语法分析器,对所述第二宏阶段代码中的宏函数进行解析,获得所述第二中间代码,具体地,将所述第二宏阶段代码输入宏函数调用语法分析器,通过遍历所述第二宏阶段代码语法分析树的各语法节点,对宏函数的函数类型传入参数进行解析,其中,对所述传入参数的解析支持常量与宏变量、常量和变量间的四项运算,对函数类型的解析即为对函数名为%EVAL的系统函数进行分类处理,并转换成python对应的eval函数运行,也即,对所述第二宏阶段代码中的宏函数进行解析,获得所述第二中间代码。
步骤S30,将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的数据步与过程步进行解析,输出目标代码。
在本实施例中,需要说明的是,所述预设数据与过程步语法分析器包括第二中间代码词法分析器和第二中间代码语法分析器,且所述预设数据与过程步语法分析器是通过自定义的多个语法文件,采用自动化语言识别工具ANTLR工具生成的,如图2所示,所述第二中间代码对应有第二中间代码语法分析树,也即,预设数据与过程步语法分析器对应有数据与过程步语法分析器语法分析树,其中,parse是根节点,dataProcStmt表示多个相同结构的代码块,L1、L2和L3为所述语法分析树的叶子节点所在的树层,其中,所述叶子节点包括dataStep节点、setStmt节点和ifStmt节点等,每一个代码块表示一个数据步或一个过程步,所述目标代码指的是SAS代码以外的其他语言代码。
将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的数据步与过程步进行解析,输出目标代码,具体地,将所述第二中间代码输入预设数据与过程步语法分析器中,通过根节点以深度优先顺序遍历第二中间代码语法分析树的各个节点,进一步地,每个节点会遍历子节点,直到叶子节点,并返回目标代码,也即,对所述第二中间代码中的数据步与过程步进行解析,输出目标代码。
本实施例通过接收SAS代码,并将所述SAS代码输入预设预处理语法分析器,输出第一中间代码,进而将所述第一中间代码输入预设宏语言语法分析器中,以对所述第一中间代码中的宏语言进行解析,输出第二中间代码,最后将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的数据步与过程步进行解析,输出目标代码。也即,本实施例首先通过接收用户输入的SAS代码,并将所述SAS代码输入预设预处理语法分析器,进行第一中间代码的获取,进而将所述第一中间代码输入预设宏语言语法分析器中,进行第二中间代码的获取,最后将所述第二中间代码输入预设数据与过程步语法分析器中,进行所述目标代码的获取。也即,本实施例只需通过预设预处理语法分析器、预设宏语言语法分析器和预设数据与过程步语法分析器对SAS代码中的宏语言、数据步和过程步分别进行语法解析,则可获得所述目标代码,所以,本实施例SAS语言编译方法在进行语言转化时,开发人员开发工作量小,且所述目标代码并不局限于机器码,易于阅读和维护,所以,解决了现有技术中语言转化开发与维护困难的技术问题。
进一步地,参照图3,基于本申请中第一实施例,在SAS语言编译方法的另一实施例中,所述将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的数据步与过程步进行解析,输出目标代码的步骤包括:
步骤S31,将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的注释语句进行选择性过滤;
在本实施例中,将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的注释语句进行选择性过滤,具体地,将所述第二中间代码输入预设数据与过程步语法分析器中,通过所述第二中间代码词法分析器对所述第二中间代码进行检测,判断所述第二中间代码是否存在注释语句,若存在,则对所述注释语句进行过滤,其中,判断所述第二中间代码是否存在注释语句的方法之一为建立一个长度为3的队列,把每一个流过队列的字符添加到队列中,其中,旧的字符会被新字符代替,若满足如下三种情况之一就即为注释语句:(a)刚进队列的字符为“*”时,队列为1或2;(b)队列长度为3,并且队列中“*”前第一个或第二个字符为“;”;(c)队列长度为3时,并且队列中“*”前第一个字符属于“\r\n\t”,前第二个字符为“*”。
步骤S32,对过滤后的所述第二中间代码进行队列匹配,获得一个或者多个代码队列;
在本实施例中,对过滤后的所述第二中间代码进行队列匹配,获得一个或者多个代码队列,具体地,通过所述第二中间代码语法分析器,对所述过滤后的所述第二中间代码进行检测,判断是否匹配到run/quit词法符号,当匹配到run/quit词法符号时,则将所述run/quit词法符号为代码块结束标记,此时,将从上一结束标记至本次结束标记之间的所有字符作为一个代码块,其中,若无上一结束标记,则将第二中间代码第一个字符至本次结束标记之间的所有字符作为一个代码块,其中,所述代码块包括第一个字符,也即,获得一个队列,当未匹配到run/quit词法符号时,则继续进行匹配,直到匹配到run/quit词法符号。
步骤S33,对各所述代码队列进行语法解析,获得所述目标代码。
在本实施例中,对各所述代码队列进行语法解析,获得所述目标代码,具体地,将所述各队列中的字符取出,建立所述第二中间代码语法分析树,其中,一队列对应以代码块,通过遍历所述第二中间代码语法分析树中的各节点,对各所述代码队列进行语法解析,获得所述目标代码。
其中,所述预设数据与过程步语法分析器包括第二中间代码词法分析器和第二中间代码语法分析器,
所述对各所述代码队列进行语法解析,获得所述目标代码的步骤包括:
步骤S331,通过所述第二中间代码词法分析器将所述队列中的字符转化为词法符号,并将各所述词法符号发送给所述第二中间代码语法分析器;
在本实施例中,通过所述第二中间代码词法分析器将所述队列中的字符转化为词法符号,并将各所述词法符号发送给所述第二中间代码语法分析器,具体地,通过所述第二中间代码词法分析器将所述队列中的字符进行组合,进而将所述字符组合为有效的单词,也即,转化为词法符号,进一步地,将各所述词法符号发送给所述第二中间代码语法分析器。
步骤S332,通过所述第二中间代码语法分析器对各所述词法符号进行识别,获得语法节点;
在本实施例中,通过所述第二中间代码语法分析器对各所述词法符号进行识别,获得语法节点,具体地,通过所述第二中间代码语法分析器对各所述词法符号进行语法分析,也即,将各所述词法符号作为输入来分析各所述词法符号组成的代码是否符合预设语法规则,进一步地,若符合预设语法规则,则对所述各所述词法符号组成的代码在预设语法规则下的的语义,获得中间代码,也即,获得语法节点。
步骤S333,基于所述语法节点,合成语法分析树,并遍历所述语法分析树的各所述语法节点,获得所述目标代码。
在本实施例中,基于所述语法节点,合成语法分析树,并遍历所述语法分析树的各所述语法节点,获得所述目标代码,具体地,基于所述语法节点,合成所述第二中间代码对应的语法分析树,并遍历所述语法分析树的各所述语法节点,也即,对所述中间代码进行优化,获得所述目标代码。
其中,所述语法节点包括数据步节点,所述第二中间代码包括数据步代码,
在步骤S333中,所述遍历所述语法分析树的各所述语法节点,获得所述目标代码的步骤包括:
A10,当对所述数据步节点进行遍历时,基于所述数据步节点中的数据步实现流程,对所述数据步代码进行流程模拟;
在本实施例中,需要说明的是,所述目标代码包括python语言代码、c语言代码、java语言代码等其他非SAS语言代码,在SAS语言中,所述数据步对数据的处理方法对应的一些数据处理步骤,所述数据步实现流程中的步骤对应的是其他语言在实现所述数据处理步骤所需的步骤流程,例如,如图4所述示为python语言在实现所述数据处理步骤所需的步骤流程图,也即,python语言在实现所述数据处理步骤所需的数据步实现流程图,其中,所述数据步实现流程图中的步骤包括:(1)引入或创建数据表,本步骤对应SAS的set/datalines语句;(2)对数据进行条件筛选,对应set句型中的keep/drop/rename/where关键字;(3)插入新增的变量,其中,新增的变量是从语法分析过程中获得的,目的是为了给新增变量设默认值,能够支持只有if语句没有else语句赋值变量的情况;(4)根据支持语法句型自动选择为分布式还是单机模式,其中,少部分对行顺序有严格要求的会采用单机模式,如retain、set end等语句;(5)虚线框表示一个自定义迭代器,它会作用于一个rdd.mapPartitions操作,该迭代器主要是处理每一行的数据,每一轮的操作就像模拟SAS的逐行操作一样,但是本质上采用Spark是并行工作的机制,而不像SAS只能顺序执行,且在每轮的迭代器中,如果有retain语句,则会取保留变量的值赋值为当前行变量的初始值;(6)把空值数据转换为无限小,这个特性与SAS保持一致;(7)处理通用语句,这些语句包括条件控制、算术运算、循环、字符处理等数据处理语句,大部分可从运行时库中找到模板来使用;(8)更新并存储保留变量的值;(9)无限小数据转为空值,匹配Spark中数据库的存储形式;(10)判断是否输出当前行数据,对应output语句,默认数据表中的每一行都输出;(11)将rdd转为dataframe需要确定每个字段的数据类型,为了支持表开始有多列空值的字段,采用默认使用前面100行数据类型与引用的dataframe的原字段类型合并的方案;(12)再一次筛选数据,对应data句型的keep/drop/rename/where关键字;(13)保存数据到HIVE或临时视图,其中,对于有明确指定输出表名的语句,如“data testdb.t1;”,则会将数据保持到HIVE,如果不指定表名,则会将数据存储成临时视图。
具体地,当对所述数据步节点进行遍历时,基于所述数据步节点中的数据步实现流程,对所述数据步代码进行流程模拟,具体地,当对所述数据步节点进行遍历时,基于所述数据步节点中的数据步实现流程,对所述数据步代码进行基于python语言的流程模拟,使得可使用python语言实现所述数据步代码对应的SAS代码可实现的所有功能和数据处理过程。
A20,通过预设语言运行时库对所述流程模拟的步骤进行句型匹配,获得所述目标代码。
在本实施例中,需要说明的是,所述预设语言运行时库包括python运行时库、java运行时库等,其中,例如,所述python运行时库用python/Spark封装SAS类似静态函数的用法的名型,在转换成目标代码时,匹配的句型可被python运行时库代替。
通过预设语言运行时库对所述流程模拟的步骤进行句型匹配,获得所述目标代码,具体地,通过预设语言运行时库对所述流程模拟的步骤进行句型匹配,将所述流程模拟的每一步骤使用预设语言运行时库中的句型进行表述,进而获得每一数据步对应的队列代码,其中,本实施例中将dataframe作为数据的临时存储对象,在每一个数据步或过程步的结束都输出一个临时的dataframe,对于有明确指定输出表名的语句,如“datatestdb.t1;”,则会将数据写到HIVE的testdb库中。如果不指定表名,则会将数据存储成临时视图,最终输出所有队列对应的代码,获得所述目标代码。
其中,所述语法节点包括过程步节点,所述第二中间代码包括过程步代码,
在步骤S333中,所述遍历所述语法分析树的各所述语法节点,获得所述目标代码的步骤包括:
B10,当对所述过程步节点进行遍历时,判断所述过程步代码中是否存在其他数据处理语言语句;
在本实施例中,当对所述过程步节点进行遍历时,判断所述过程步代码中是否存在其他数据处理语言语句,其中,所述其他数据处理语言语句包括除SAS语言之外的所有类型的数据管理与分析语言,具体地,当对所述过程步节点进行遍历时,通过所述预设数据与过程步语法分析器检测所述过程步节点中是否存在其他数据处理语言语句,也即,判断所述过程步代码中是否存在其他数据处理语言语句。
B20,当所述过程步代码中存在所述其他数据处理语言语句时,则调用预设数据管理与分析语言语法分析器对所述其他数据处理语言语句进行语法解析,并向所述预设数据与过程步语法分析器返回数据管理与分析语言解析结果;
在本实施例中,当所述过程步代码中存在所述其他数据处理语言语句时,则调用预设数据管理与分析语言语法分析器对所述其他数据处理语言语句进行语法解析,并向所述预设数据与过程步语法分析器返回数据管理与分析语言解析结果,具体地,当所述过程步代码中存在所述其他数据处理语言语句时,则调用预设数据管理与分析语言语法分析器对所述其他数据处理语言语句进行语法解析,其中,所述预设数据管理与分析语言语法分析器会匹配所有的其他数据处理语言语句,并对于多行表示的select子句会做特殊处理,具体地,所述其他数据处理语言语句会先通过所述预设数据管理与分析语言语法分析器中的特殊词法分析器对所述其他数据处理语言语句进行词法分析,获得所述其他数据处理语言语句对应的数据管理与分析语言词法符号,其中,所述词法符号包括被忽略的空白字符和回车符等,进而将连续多个空白和回车符替换成一个空白符,这样能把多行表示的其他数据处理语言语句转换成单行的其他数据处理语言语句,并且在此过程中,若检测其他数据处理语言语句中的函数名,则将所述函数名转化为SPARK数据管理与分析语言中对应的函数名,例如函数名为“mean”替换为“avg”,进而获得所述其他数据处理语言语句的数据管理与分析语言解析结果,并向所述预设数据与过程步语法分析器返回数据管理与分析语言解析结果。
B30,对所述第二中间代码进行语法解析,并基于所述数据管理与分析语言解析结果输出所述目标代码。
在本实施例中,对所述第二中间代码进行语法解析,并基于所述数据管理与分析语言解析结果输出所述目标代码,具体地,对所述第二中间代码中的除所述其他数据处理语言语句之外的其余语句进行语法解析,也即,通过遍历所述第二中间代码语法分析树中的过程步节点,对所述其余语句进行优化,进一步地,结合所述数据管理与分析语言解析结果,输出所述目标代码,如图5所示为本实施例结合第一实施例的一种实施方式的的示意图,其中,图中将SAS代码编译为了python代码,所述Pro SQL语法分析器属于预设数据管理与分析语言语法分析器中的一种语法分析器,图中a.g4、b.g4、c.g4、d.g4和e.g4均表示自定义语法文件,基于所述自定义语法文件,通过采用自动化语言识别工具ANTLR工具可生成所述自定义语法文件对应的词法分析器和语法分析器。
本实施例通过将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的注释语句进行选择性过滤,进而对过滤后的所述第二中间代码进行队列匹配,获得一个或者多个代码队列,最后对各所述代码队列进行语法解析,获得所述目标代码。也即,本实施例将所述第二中间代码输入预设数据与过程步语法分析器中,首先进行对所述第二中间代码的选择性过滤,进而进行对所述队列的获取,最后进行对所述队列的语法解析,获得所述目标代码。也即,本实施可实现将所述第二中间代码转化为目标代码,且该方法只需将所述第二中间代码输入预设数据与过程步语法分析器中,即可输出所述目标代码,且所述目标代码并不局限于机器码,所以,为解决现有技术中语言转化开发与维护困难的技术问题奠定了基础。
参照图6,图6是本发明实施例方案涉及的硬件运行环境的设备结构示意图。
如图6所示,该SAS语言编译设备可以包括:处理器1001,例如CPU,存储器1005,通信总线1002。其中,通信总线1002用于实现处理器1001和存储器1005之间的连接通信。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储设备。
可选地,该SAS语言编译设备还可以包括矩形用户接口、网络接口、摄像头、RF(Radio Frequency,射频)电路,传感器、音频电路、WiFi模块等等。矩形用户接口可以包括显示屏(Display)、输入子模块比如键盘(Keyboard),可选矩形用户接口还可以包括标准的有线接口、无线接口。网络接口可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。
本领域技术人员可以理解,图6中示出的SAS语言编译设备结构并不构成对SAS语言编译设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图6所示,作为一种计算机存储可读存储介质的存储器1005中可以包括操作系统、网络通信模块以及SAS语言编译程序。操作系统是管理和控制SAS语言编译设备硬件和软件资源的程序,支持SAS语言编译程序以及其它软件和/或程序的运行。网络通信模块用于实现存储器1005内部各组件之间的通信,以及与SAS语言编译系统中其它硬件和软件之间通信。
在图6所示的SAS语言编译设备中,处理器1001用于执行存储器1005中存储的SAS语言编译程序,实现上述任一项所述的SAS语言编译方法的步骤。
本发明SAS语言编译设备具体实施方式与上述SAS语言编译方法各实施例基本相同,在此不再赘述。
本发明还提供一种SAS语言编译装置,所述SAS语言编译装置包括:
预处理模块,用于所述接收SAS代码,并将所述SAS代码输入预设预处理语法分析器,输出第一中间代码;
宏阶段模块,用于所述将所述第一中间代码输入预设宏语言语法分析器中,以对所述第一中间代码中的宏语言进行解析,输出第二中间代码;
数据与过程步模块,用于所述将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的数据步与过程步进行解析,输出目标代码。
可选地,所述宏阶段模块包括:
宏语法子模块,用于所述将所述第一中间代码输入所述宏语法分析器,对所述第一中间代码中的宏语法进行解析,获得第一宏阶段代码;
宏变量取值子模块,用于所述将所述第一宏阶段代码输入所述宏变量取值分析器,对所述第一宏阶段代码中的宏变量进行解析,获得第二宏阶段代码;
宏函数调用子模块,用于所述将所述第二宏阶段代码输入宏函数调用语法分析器,对所述第二宏阶段代码中的宏函数进行解析,获得所述第二中间代码。
可选地,所述宏语法子模块包括:
输入单元,用于所述将所述第一中间代码输入所述宏语法分析器,以基于预设语法模式识别所述宏定义和宏控制语句;
宏语法单元,用于所述对所述宏定义和宏控制语句进行语言转换,生成所述宏定义和宏控制语句对应的python语言,获得宏语法处理代码;
拼接单元,用于所述将所述宏语法处理代码与预设固定语句进行拼接,获得所述第一宏阶段代码。
可选地,所述数据与过程步模块包括:
过滤子模块,用于所述将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的注释语句进行选择性过滤;
队列匹配子模块,用于所述对过滤后的所述第二中间代码进行队列匹配,获得一个或者多个代码队列;
语法解析子模块,用于所述对各所述代码队列进行语法解析,获得所述目标代码。
可选地,所述语法解析子模块包括:
词法分析单元,用于所述通过所述第二中间代码词法分析器将所述队列中的字符转化为词法符号,并将各所述词法符号发送给所述第二中间代码语法分析器;
节点识别单元,由于所述通过所述第二中间代码语法分析器对各所述词法符号进行识别,获得语法节点;
遍历单元,用于所述基于所述语法节点,合成语法分析树,并遍历所述语法分析树的各所述语法节点,获得所述目标代码。
可选地,所述遍历单元包括:
流程模拟子单元,用于所述当对所述数据步节点进行遍历时,基于所述数据步节点中的数据步实现流程,对所述数据步代码进行流程模拟;
句型匹配子单元,用于所述通过预设语言运行时库对所述流程模拟的步骤进行句型匹配,获得所述目标代码。
可选地,所述遍历单元包括:
判断子单元,用于所述当对所述过程步节点进行遍历时,判断所述过程步代码中是否存在其他数据处理语言语句;
解析子单元,用于所述当所述过程步代码中存在所述其他数据处理语言语句时,则调用预设数据管理与分析语言语法分析器对所述其他数据处理语言语句进行语法解析,并向所述预设数据与过程步语法分析器返回数据管理与分析语言解析结果;
输出子单元,用于所述对所述第二中间代码进行语法解析,并基于所述数据管理与分析语言解析结果输出所述目标代码。
本发明SAS语言编译装置的具体实施方式与上述SAS语言编译方法各实施例基本相同,在此不再赘述。
本发明提供了一种可读存储介质,所述可读存储介质为计算机可读存储可读存储介质,且所述可读存储介质存储有一个或者一个以上程序,所述一个或者一个以上程序还可被一个或者一个以上的处理器执行以用于实现上述任一项所述的SAS语言编译方法的步骤。
本发明可读存储介质具体实施方式与上述SAS语言编译方法各实施例基本相同,在此不再赘述。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利处理范围内。

Claims (10)

1.一种SAS语言编译方法,其特征在于,所述SAS语言编译方法包括:
接收SAS代码,并将所述SAS代码输入预设预处理语法分析器,输出第一中间代码;
将所述第一中间代码输入预设宏语言语法分析器中,以对所述第一中间代码中的宏语言进行解析,输出第二中间代码;
将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的数据步与过程步进行解析,输出目标代码。
2.如权利要求1所述SAS语言编译方法,其特征在于,所述预设宏语言语法分析器包括宏语法分析器、宏变量取值分析器和宏函数调用语法分析器,
所述将所述第一中间代码输入预设宏语言语法分析器中,以对所述第一中间代码中的宏语言进行解析,输出第二中间代码的步骤包括:
将所述第一中间代码输入所述宏语法分析器,对所述第一中间代码中的宏语法进行解析,获得第一宏阶段代码;
将所述第一宏阶段代码输入所述宏变量取值分析器,对所述第一宏阶段代码中的宏变量进行解析,获得第二宏阶段代码;
将所述第二宏阶段代码输入宏函数调用语法分析器,对所述第二宏阶段代码中的宏函数进行解析,获得所述第二中间代码。
3.如权利要求2所述SAS语言编译方法,其特征在于,所述第一中间代码包括宏定义和宏控制语句,
所述将所述第一中间代码输入所述宏语法分析器,对所述第一中间代码中的宏语法进行解析,获得第一宏阶段代码的步骤包括:
将所述第一中间代码输入所述宏语法分析器,以基于预设语法模式识别所述宏定义和宏控制语句;
对所述宏定义和宏控制语句进行语言转换,生成所述宏定义和宏控制语句对应的python语言,获得宏语法处理代码;
将所述宏语法处理代码与预设固定语句进行拼接,获得所述第一宏阶段代码。
4.如权利要求1所述SAS语言编译方法,其特征在于,所述将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的数据步与过程步进行解析,输出目标代码的步骤包括:
将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的注释语句进行选择性过滤;
对过滤后的所述第二中间代码进行队列匹配,获得一个或者多个代码队列;
对各所述代码队列进行语法解析,获得所述目标代码。
5.如权利要求4所述SAS语言编译方法,其特征在于,所述预设数据与过程步语法分析器包括第二中间代码词法分析器和第二中间代码语法分析器,
所述对各所述代码队列进行语法解析,获得所述目标代码的步骤包括:
通过所述第二中间代码词法分析器将所述队列中的字符转化为词法符号,并将各所述词法符号发送给所述第二中间代码语法分析器;
通过所述第二中间代码语法分析器对各所述词法符号进行识别,获得语法节点;
基于所述语法节点,合成语法分析树,并遍历所述语法分析树的各所述语法节点,获得所述目标代码。
6.如权利要求5所述SAS语言编译方法,其特征在于,所述语法节点包括数据步节点,所述第二中间代码包括数据步代码,
所述遍历所述语法分析树的各所述语法节点,获得所述目标代码的步骤包括:
当对所述数据步节点进行遍历时,基于所述数据步节点中的数据步实现流程,对所述数据步代码进行流程模拟;
通过预设语言运行时库对所述流程模拟的步骤进行句型匹配,获得所述目标代码。
7.如权利要求5所述SAS语言编译方法,其特征在于,所述语法节点包括过程步节点,所述第二中间代码包括过程步代码,
所述遍历所述语法分析树的各所述语法节点,获得所述目标代码的步骤包括:
当对所述过程步节点进行遍历时,判断所述过程步代码中是否存在其他数据处理语言语句;
当所述过程步代码中存在所述其他数据处理语言语句时,则调用预设数据管理与分析语言语法分析器对所述其他数据处理语言语句进行语法解析,并向所述预设数据与过程步语法分析器返回数据管理与分析语言解析结果;
对所述第二中间代码进行语法解析,并基于所述数据管理与分析语言解析结果输出所述目标代码。
8.一种SAS语言编译装置,其特征在于,所述SAS语言编译装置应用于SAS语言编译设备,所述SAS语言编译装置包括:
预处理模块,用于所述接收SAS代码,并将所述SAS代码输入预设预处理语法分析器,输出第一中间代码;
宏阶段模块,用于所述将所述第一中间代码输入预设宏语言语法分析器中,以对所述第一中间代码中的宏语言进行解析,输出第二中间代码;
数据与过程步模块,用于所述将所述第二中间代码输入预设数据与过程步语法分析器中,以对所述第二中间代码中的数据步与过程步进行解析,输出目标代码。
9.一种SAS语言编译设备,其特征在于,所述SAS语言编译设备包括:存储器、处理器以及存储在存储器上的用于实现所述SAS语言编译方法的程序,
所述存储器用于存储实现SAS语言编译方法的程序;
所述处理器用于执行实现所述SAS语言编译方法的程序,以实现如权利要求1至7中任一项所述SAS语言编译方法的步骤。
10.一种可读存储介质,其特征在于,所述可读存储介质上存储有实现SAS语言编译方法的程序,所述实现SAS语言编译方法的程序被处理器执行以实现如权利要求1至7中任一项所述SAS语言编译方法的步骤。
CN201910909667.6A 2019-09-24 2019-09-24 Sas语言编译方法、装置、设备及可读存储介质 Pending CN110673854A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910909667.6A CN110673854A (zh) 2019-09-24 2019-09-24 Sas语言编译方法、装置、设备及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910909667.6A CN110673854A (zh) 2019-09-24 2019-09-24 Sas语言编译方法、装置、设备及可读存储介质

Publications (1)

Publication Number Publication Date
CN110673854A true CN110673854A (zh) 2020-01-10

Family

ID=69079228

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910909667.6A Pending CN110673854A (zh) 2019-09-24 2019-09-24 Sas语言编译方法、装置、设备及可读存储介质

Country Status (1)

Country Link
CN (1) CN110673854A (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112394940A (zh) * 2020-11-18 2021-02-23 平安普惠企业管理有限公司 转换代码语法的方法、装置和计算机设备
CN112698835A (zh) * 2021-01-05 2021-04-23 潍柴动力股份有限公司 一种单片机编译链接方法、装置、计算机设备及存储介质
CN113391818A (zh) * 2021-03-26 2021-09-14 广州海量数据库技术有限公司 一种编译文件的生成方法以及装置
CN113656009A (zh) * 2021-08-26 2021-11-16 五八同城信息技术有限公司 一种宏处理方法、装置、电子设备及存储介质
CN113672687A (zh) * 2021-10-25 2021-11-19 北京值得买科技股份有限公司 一种电商大数据处理方法、装置、设备及存储介质
CN114090017A (zh) * 2022-01-20 2022-02-25 北京大学 编程语言的解析方法及装置、非易失性存储介质
CN115309406A (zh) * 2022-09-30 2022-11-08 北京大禹智芯科技有限公司 P4控制分支语句的性能优化方法和装置
CN115809063A (zh) * 2022-12-05 2023-03-17 星环信息科技(上海)股份有限公司 一种存储过程编译方法、系统、电子设备和存储介质
CN117406996A (zh) * 2023-10-20 2024-01-16 北京市辰至半导体科技有限公司 硬件描述代码的语义分析方法及装置

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010011371A1 (en) * 1998-09-29 2001-08-02 Min-Mei Tang Compilation of embedded language statements in a source code program
US8453126B1 (en) * 2008-07-30 2013-05-28 Dulles Research LLC System and method for converting base SAS runtime macro language scripts to JAVA target language
US20130159982A1 (en) * 2011-12-16 2013-06-20 Apostolos Lerios Language Translation Using Preprocessor Macros
US8943472B1 (en) * 2008-07-30 2015-01-27 Dulles Research LLC System and method for directly accessing SAS datasets from a JAVA program
CN108874396A (zh) * 2018-05-31 2018-11-23 苏州蜗牛数字科技股份有限公司 基于hlsl的多平台多目标语言的交叉编译器及编译方法
CN109284131A (zh) * 2013-05-24 2019-01-29 相干逻辑公司 具有可编程优化的存储器-网络处理器
CN109345368A (zh) * 2018-08-22 2019-02-15 中国平安人寿保险股份有限公司 基于大数据的信用评估方法、装置、电子设备及存储介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010011371A1 (en) * 1998-09-29 2001-08-02 Min-Mei Tang Compilation of embedded language statements in a source code program
US8453126B1 (en) * 2008-07-30 2013-05-28 Dulles Research LLC System and method for converting base SAS runtime macro language scripts to JAVA target language
US8943472B1 (en) * 2008-07-30 2015-01-27 Dulles Research LLC System and method for directly accessing SAS datasets from a JAVA program
US20130159982A1 (en) * 2011-12-16 2013-06-20 Apostolos Lerios Language Translation Using Preprocessor Macros
CN109284131A (zh) * 2013-05-24 2019-01-29 相干逻辑公司 具有可编程优化的存储器-网络处理器
CN108874396A (zh) * 2018-05-31 2018-11-23 苏州蜗牛数字科技股份有限公司 基于hlsl的多平台多目标语言的交叉编译器及编译方法
CN109345368A (zh) * 2018-08-22 2019-02-15 中国平安人寿保险股份有限公司 基于大数据的信用评估方法、装置、电子设备及存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JASON SECOSKY 等: "Executing a PROC from a DATA Step", 《SAS GLOBAL FORUM 2012》, 31 December 2012 (2012-12-31), pages 1 - 12 *
高华龙: "密度比的广义P值检验及其SAS的可视化交互式实现", 《中国优秀硕士学位论文全文数据库 基础科学辑》, vol. 2015, no. 5, 15 May 2015 (2015-05-15), pages 002 - 124 *

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112394940B (zh) * 2020-11-18 2024-02-20 内蒙古九有信创科技有限公司 转换代码语法的方法、装置和计算机设备
CN112394940A (zh) * 2020-11-18 2021-02-23 平安普惠企业管理有限公司 转换代码语法的方法、装置和计算机设备
CN112698835B (zh) * 2021-01-05 2023-08-18 潍柴动力股份有限公司 一种单片机编译链接方法、装置、计算机设备及存储介质
CN112698835A (zh) * 2021-01-05 2021-04-23 潍柴动力股份有限公司 一种单片机编译链接方法、装置、计算机设备及存储介质
CN113391818A (zh) * 2021-03-26 2021-09-14 广州海量数据库技术有限公司 一种编译文件的生成方法以及装置
CN113656009A (zh) * 2021-08-26 2021-11-16 五八同城信息技术有限公司 一种宏处理方法、装置、电子设备及存储介质
CN113656009B (zh) * 2021-08-26 2024-02-02 五八同城信息技术有限公司 一种宏处理方法、装置、电子设备及存储介质
CN113672687A (zh) * 2021-10-25 2021-11-19 北京值得买科技股份有限公司 一种电商大数据处理方法、装置、设备及存储介质
CN114090017A (zh) * 2022-01-20 2022-02-25 北京大学 编程语言的解析方法及装置、非易失性存储介质
CN114090017B (zh) * 2022-01-20 2022-06-24 北京大学 编程语言的解析方法及装置、非易失性存储介质
WO2023138078A1 (zh) * 2022-01-20 2023-07-27 北京大学 编程语言的解析方法及装置、非易失性存储介质
CN115309406B (zh) * 2022-09-30 2022-12-20 北京大禹智芯科技有限公司 P4控制分支语句的性能优化方法和装置
CN115309406A (zh) * 2022-09-30 2022-11-08 北京大禹智芯科技有限公司 P4控制分支语句的性能优化方法和装置
CN115809063B (zh) * 2022-12-05 2023-08-22 星环信息科技(上海)股份有限公司 一种存储过程编译方法、系统、电子设备和存储介质
CN115809063A (zh) * 2022-12-05 2023-03-17 星环信息科技(上海)股份有限公司 一种存储过程编译方法、系统、电子设备和存储介质
CN117406996A (zh) * 2023-10-20 2024-01-16 北京市辰至半导体科技有限公司 硬件描述代码的语义分析方法及装置
CN117406996B (zh) * 2023-10-20 2024-04-16 北京市辰至半导体科技有限公司 硬件描述代码的语义分析方法及装置

Similar Documents

Publication Publication Date Title
CN110673854A (zh) Sas语言编译方法、装置、设备及可读存储介质
CN111241454B (zh) 一种生成网页代码的方法、系统和装置
US8091071B2 (en) Method and system for template-based code generation
US9122540B2 (en) Transformation of computer programs and eliminating errors
CN108255837B (zh) 一种sql解析器及方法
CN115639980A (zh) 一种低代码平台可拖拽的前端逻辑编排方法及装置
Cánovas Izquierdo et al. A domain specific language for extracting models in software modernization
US11604774B2 (en) Method and apparatus of converting schema in deep learning framework, and computer storage medium
US10691434B2 (en) System and method for converting a first programming language application to a second programming language application
CN114064601B (zh) 存储过程转换方法、装置、设备和存储介质
CN114138274A (zh) 一种深度学习编译器的高层中间表示转换方法及相关装置
CN115344932A (zh) 一种模型数据的规则审查方法、装置及电子设备
CN113806429A (zh) 基于大数据流处理框架的画布式日志分析方法
US12038940B2 (en) Architecture for data map converters
Zhang et al. Automated extraction of grammar optimization rule configurations for metamodel-grammar co-evolution
CN110928535B (zh) 衍生变量部署方法、装置、设备及可读存储介质
CN113885844A (zh) 一种业务服务编排方法及相关装置
CN113608748A (zh) C语言转换Java语言的数据处理方法、装置及设备
CN117216092A (zh) 一种优化tdsql脚本的方法、装置、设备及可读存储介质
CN110716953A (zh) Sql语句自动生成方法、装置、设备及可读存储介质
JP2007122187A (ja) プログラム・コード生成装置
CN107577476A (zh) 一种基于模块划分的安卓系统源码差异性分析方法、服务器及介质
CN117971236B (zh) 基于词法和语法分析的算子解析方法、装置、设备及介质
CN114489682B (zh) nginx配置文件的操作方法、装置和设备
CN117591095A (zh) 一种基于表达式ast解析和可配置模板的代码生成方法

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