CN109739512B - 一种解析型语言文本式分析转换方法 - Google Patents

一种解析型语言文本式分析转换方法 Download PDF

Info

Publication number
CN109739512B
CN109739512B CN201811624663.5A CN201811624663A CN109739512B CN 109739512 B CN109739512 B CN 109739512B CN 201811624663 A CN201811624663 A CN 201811624663A CN 109739512 B CN109739512 B CN 109739512B
Authority
CN
China
Prior art keywords
language
definitions
definition
code
string
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
CN201811624663.5A
Other languages
English (en)
Other versions
CN109739512A (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.)
Anhui Sanqi Jiyu Network Technology Co ltd
Original Assignee
Jiangsu Jiguang Network Technology 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 Jiangsu Jiguang Network Technology Co ltd filed Critical Jiangsu Jiguang Network Technology Co ltd
Priority to CN201811624663.5A priority Critical patent/CN109739512B/zh
Publication of CN109739512A publication Critical patent/CN109739512A/zh
Application granted granted Critical
Publication of CN109739512B publication Critical patent/CN109739512B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明涉及一种解析型语言文本式分析转换方法,包括S100:罗列出所有客户端环境用到的编程语言,分解为23种语言特征定义,为每一种支持的语言配置相关的语言描述配置文件;S200:把支持的语言的各种特征读取到分析转换器;S300:根据配置特征初始化每一个特征对应的解析类,语义特征定义分析器赋值和初始化;S400:输入需要转换的源代码文件,读取出源代码变成一个string,提供给语言转换处理器;S500:创建源语言特征定义主体;S600:创建目标语言特征定义主体;S700:用源语义特征定义分析器不间断循环分解源代码的string,直到产生完整的转换完成的string;S800:把产生出来的string保存为目标代码文件。本发明可降低开发成本,具有故障率低、可控性强的优点。

Description

一种解析型语言文本式分析转换方法
技术领域
本发明涉及计算机程序设计语言技术领域,具体的说是一种解析型语言文本式分析转换方法。
背景技术
目前的游戏行业,百花齐放,每一个平台每一个客户端环境都有着强大用户群,不管是网页、手机、PC、手持游戏机或是家用游戏机等不同的客户端环境。都有很好的付费用户群,且他们平时的消费环境都比较固定,比较少的互相转换应用环境。这些游戏都有自己的客户端环境特性,想在这个客户端环境取得最好的运行时性能效率,基本都是要用这个客户端环境推荐的开发语言去开发,每一个语言都各有一些差异性,一般开发人员只精通一种语言,无法同时精通多种不同的开发语言。
作为游戏研发公司经常要面对一个难题是:有限的预算和固定的开发人员,很难适应所有的开发语言和工具,且重复的开发也往往带来极低的开发效率,每一个客户端环境重新招聘新员工,不利于积累和沉淀经验。
目前,行业内还没有哪一个技术可以完整的支持所有客户端环境,比较近似的就是类似Java虚拟机,通过虚拟机变相的支持更多的客户端环境,但是Java也好,C#也好没有哪一个语言是真正可以完整支持所有语言的。比如说Flash环境下,flash只能使用AS3语言开发,Java也无法替代,比如H5环境下需要使用JS开发,使用纯粹的Java也是无法开发的,且由于指定环境的企业都有自己的目的,不知道以后还会不会有其他类似的客户端环境有自己专属的语言。语言变化太快,不可能让大多数程序员一直跟着换,
基于前述问题,如何用一种语言开发而能自然的变换为适合各种不同客户端环境的不同语言,成为当今市场上迫切需要解决的难题。
发明内容
为了避免和解决上述技术问题,本发明提出了一种解析型语言文本式分析转换方法。
本发明所要解决的技术问题采用以下技术方案来实现:
一种解析型语言文本式分析转换方法,包括以下步骤:
步骤S100:罗列出所有客户端环境用到的编程语言,把语言分解为23种语言特征定义,为每一种支持的语言配置相关的语言描述配置文件;
步骤S200:分析转换器会把支持的语言的各种特征读取到分析转换器,即读取语言描述配置文件;
步骤S300:根据配置特征初始化每一个特征对应的解析类,并按照对应23个特征定义的关键字,来语义特征定义分析器赋值和初始化;
步骤S400:输入需要转换的源代码文件,读取出源代码的代码变成一个string,把这个string提供给语言转换处理器;
步骤S500:根据输入的源代码文件,创建源语言特征定义主体;
步骤S600:选择一种输出的目标语言,创建目标语言特征定义主体;
步骤S700:用源语义特征定义分析器不间断循环分解源代码的string,目标代码的string被不断添加,直到产生一个完整的转换完成的string;
步骤S800:把产生出来的string保存为目标代码文件,即目标代码文件保存处理,至此整个代码分析过程转换完毕。
进一步的,所述23种语言特征定义包括:类定义、结构体定义、枚举定义、注释定义、语义标签定义、宏定义、特殊字符定义、名词空间定义、引用定义、托管定义、属性定义、函数定义、成员变量定义、循环定义、临时变量定义、判断语句定义、运算符号定义、语法关键字定义、强制类型转换定义、数字和字符定义、命令语句定义、参数定义、访问权限定义。
进一步的,所述步骤S700具体包括:
步骤S701:对每一种源语义特征定义分析器进行排序;
步骤S702:逐个遍历每一种源语义特征定义分析器,去判断步骤S400得到的源代码string;
步骤S703:如果某一个源语义特征定义分析器,判断可以分解代码,直至遇到代码的定义结束符号,[define:#end#{]“{”,string会剩下“{”之后的代码,交由后续的其他分析器继续分解;
步骤S704:成功分解掉一部分代码的分析器,把代码转换为语言特征定义过的数据变量,即完成代码转换特征描述方法;
步骤S705:请求目标语言特征定义主体,调度一个和源代码分析器一样类型的目标代码分析器;
步骤S706:把源语义特征定义分析器得到的对应数据复制给目标语义特征定义分析器;
步骤S707:目标语义特征定义分析器在得到对应的定义数据,根据配置文件定义的特征定义,执行代码转换函数模板,来产生对应的目标代码,即完成特征描述转换代码方法;
步骤S708:目标语言特征定义主体申请一个string作为输出代码文本;
步骤S709:调用目标语义特征定义分析器的ToString()函数,即特征描述转换代码方法,在这个string里面追加产生的新代码。
进一步的,所述步骤S701中将类定义、结构体定义、枚举定义、注释定义、宏定义、引用定义、名词空间定义设定为高优先级,其余的分析器则根据经验向后排序。
进一步的,所述步骤S702中,每一个语义特征定义分析器使用之前,语言描述配置文件定义过的关键词会去判断是否该由这个语义特征定义分析器去分解代码。
进一步的,所述步骤S700开始前,源语言特征定义主体拿到步骤S400的源代码string,进行去除无用空格、无用换行操作。
本发明的有益效果是:本发明提供一种不用去兼容而是选择迎合所有客户端环境进行编程语言转换的方法,通过将解释型语言分解为23种语言特征定义后转换为任一种语言,有效降低游戏研发企业在复杂客户端环境下的开发成本,提高开发效率,简化项目结构,具有故障率低、操作方便、可控性强的优点。
附图说明
下面结合附图和实施例对本发明进一步说明。
图1为本发明的工作流程示意图;
图2为本发明实施例中等待分析转换前的C#代码文件;
图3为本发明实施例中分析转换后得到的AS3代码文件;
其中:
001为语言描述配置文件:codetransform.ini、NamespaceDefine.ini、CoreClassDefine.ini、……、CommandTransform.ini、KeyWordDefine.ini、OpcodeDefine.ini;其中,CodeFeature1、……、CodeFeature99表示代码特征;
002为源代码文件:inputSrcFile;
003为语言转换处理器:CodeTransform;
004为源语言特征定义主体:SrcCodeFileTransform;
005为源语义特征定义分析器:SrcClassTransform、SrcNamespaceTransform、……、SrcMemberTransform、SrcFunctionTransform;
007为目标语言特征定义主体:DestCodeFileTransform;
008为目标语义特征定义分析器:DestTransform;
009为特征描述转换代码方法:ToString()(DestCode)。
具体实施方式
为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面对本发明进一步阐述。
如图1至图3所示,一种解析型语言文本式分析转换方法,其特征在于:包括以下步骤:
步骤S100:罗列出所有客户端环境用到的编程语言,把语言分解为23种语言特征定义,为每一种支持的语言配置相关的语言描述配置文件001;
其中,所述23种语言特征定义包括:
1、类定义:负责解析代码文件中的类声明部分,由是否继承、是否是接口类、是否是部分类、该语言部分类关键词文本、该语言类声明关键词文本、该语言接口声明文本、该语言继承关键词文本、该类的名字、该类的父类名字、该语言类的访问权限几个变量构成;
2、结构体定义:负责解析代码文件中的结构体声明部分,由该语言结构体声明关键词文本、该结构体的名字几个变量构成;
3、枚举定义:负责解析代码文件中的枚举声明部分,由枚举名字、每一个枚举的名字和对应的枚举代表数字几个变量构成。
4、注释定义:负责解析代码文件中的注释声明部分,由行注释关键词、段落注释关键词构成;
5、语义标签定义:负责解析代码文件中的语义声明部分,由语义关键词、语义关闭关键词构成;
6、宏定义:负责解析代码文件中的宏声明部分,由宏开始关键词、宏结束关键词、宏或关键词、宏名字几个变量构成;
7、特殊字符定义:负责解析代码文件中的特殊字符声明部分,由特殊字符文本组构成;
8、名词空间定义:负责解析代码文件中的名词空间声明部分,由名词空间定义关键词、名字空间名字构成;
9、引用定义:负责解析代码文件中的类或库引用声明部分,由引用定义关键词、引用类/库名字构成;
10、托管定义:负责解析代码文件中的托管声明部分,由托管定义关键词、托管访问权限、托管名字、托管参数组、托管返回值几个构成;
11、属性定义:负责解析代码文件中的属性声明部分,由属性定义关键词、属性访问权限、属性名字、属性返回值、属性内部代码文本几个构成;
12、函数定义:负责解析代码文件中的函数声明部分,由函数定义关键词、函数访问权限、函数名字、函数参数组、函数返回值、函数可覆写性、函数内部代码文本几个构成;
13、成员变量定义:负责解析代码文件中的成员变量声明部分,由成员变量定义关键词、成员变量访问权限、成员变量名字、成员变量默认值、成员变量类型几个构成;
14、循环定义:负责解析代码文件中的循环语句声明部分,由循环关键词、循环启动条件、循环结束条件、循环变换条件、循环内部代码文本几个构成;
15、临时变量定义:负责解析代码文件中的临时变量声明部分,由临时变量定义关键词、临时变量访问权限、临时变量名字、临时变量默认值、临时变量类型几个构成;
16、判断语句定义:负责解析代码文件中的判断语句声明部分,由判断开始关键词、判断分支关键词、判断内代码文本几个构成;
17、运算符号定义:负责解析代码文件中的运算符号声明部分,由运算符号组关键词构成;
18、语法关键字定义:负责解析代码文件中的语法声明部分,由语法定义关键词构成;
19、强制类型转换定义:负责解析代码文件中的强制类型转换声明部分,由强制类型转换关键词构成;
20、数字和字符定义:负责解析代码文件中的数字和字符声明部分,由强制数字和符号关键词构成;
21、命令语句定义:负责解析代码文件中的命令语句声明部分,由命令语句的分解词组构成;
22、参数定义:负责解析代码文件中的参数是否是引用传递或者是值传递声明定义,由引用或值传递关键词构成;
23、访问权限定义:负责解析代码文件中的访问权限声明部分,由访问权限类型关键词构成;
通过以上23个对于一个解释型语言的分解和定义,可以把所有的解释型语言拆解为以上的23种定义的任意组合,可以用来描述出任何一句代码定义,这和各大IDE的编译器有些类似,但是IDE只是产生编译后的结果,而本发明的目标是从任意一个语言变成另一个语言,这样可以确认是否结果正确,可以根据客户端平台优化代码的最终性能,可以使用个客户端平台的主流IDE开发调试具体在那个客户端平台下的游戏运行情况。
在本发明实施例中,为方便理解,此处选取将C#语言转换成AS3语言为例。
其中,源转换C#语言经23种语言特征定义后为:
类定义:IsInhret,IsInterface,IsPartial,[keyword:IsPartial:partial],[define:class],[keyword:IsInhret:”:”],classname,parentname,eClassVisiblity。
结构体定义:[define:struct],structname
枚举定义:[define:enum],enumname,keyvaluepair<string,int>.
注释定义:[define://],[define:/*:*/]。
语义标签定义:[define:#:/n]
宏定义:[define:#if:#elif:#else:#endif]
特殊字符定义:[[]]
名词空间定义:[define:namespace],[define:#end#{],namespace_name
引用定义:[define:using],refname
托管定义:[#define:delegate],eClassVisiblity delegatename,paramarray,returnclass。
属性定义:[#define:attribute{get{};set{}}],eClassVisiblity,atributename,returnclass,settext,gettext。
函数定义:[#define:virtual visiblity class function(...)],eClassVisiblity,atributename,returnclass,paramarray,functioncodetext,
成员变量定义:[#define:visiblity class member=default],eClassVisiblity,class,membername,defaulttext.
循环定义:[#define:for:;:;],[#define:foreach:in],forbegintextformidext forendtext,forcodetext。
临时变量定义:[#define:class vary=default],class,varyname,defaulttext.
判断语句定义:[#define:if:else:elseif],[#define:switch:case:default],iftextarray。
运算符号定义:[#define:+:-:*:/:+=:-=:*=:/=:--:++;<<:>>:&&:||:&:|]。
语法关键字定义:[#define:.]。
强制类型转换定义:[#define:(class)()],as is
数字和字符定义:[#define:float:.f],0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。
命令语句定义:[#define:function.call().p1:p2:p3:returnclass]。
参数定义:[#define:ref:out]。
访问权限定义:[#define:public:protected:private:internal]。
其中,目标转换AS3语言经23种语言特征定义后为:
类定义:IsInhret,IsInterface,IsPartial,[keyword:null:null],[define:class],[keyword:IsInhret:extend],classname,parentname,eClassVisiblity。
结构体定义:[define:null]。
枚举定义:[define:null]。
注释定义:[define://],[define:/*:*/]。
语义标签定义:[define:null]
宏定义:[define:null]
特殊字符定义:[null]
名词空间定义:[define:package],namespace_name
引用定义:[define:import],refname
托管定义:[#define:Function],eClassVisiblity delegatename,paramarray,returnclass。
属性定义:[#define:attribute{get function{};set function{}}],eClassVisiblity,atributename,returnclass,settext,gettext。
函数定义:[#define:virtual visiblity function function(...):class],eClassVisiblity,atributename,returnclass,paramarray,functioncodetext,
成员变量定义:[#define:visiblity member:class=default],eClassVisiblity,class,membername,defaulttext.
循环定义:[#define:for:;:;],[#define:foreach:in],forbegintextformidext forendtext,forcodetext。
临时变量定义:[#define:vary:class=default],class,varyname,defaulttext.
判断语句定义:[#define:if:else:elseif],[#define:switch:case:default],iftextarray。
运算符号定义:[#define:+:-:*:/:+=:-=:*=:/=:--:++;null:null:&&:||:&:|]。
语法关键字定义:[#define:.]。
强制类型转换定义:[#define:(class)()],as is
数字和字符定义:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。
命令语句定义:[#define:function.call().p1:p2:p3:returnclass]。
参数定义:[#define:null:null]。
访问权限定义:[#define:public:protected:private:internal]。
步骤S200:分析转换器会把支持的语言的各种特征读取到分析转换器,即读取语言描述配置文件001;
步骤S300:根据配置特征初始化每一个特征对应的解析类,并按照对应23个特征定义的关键字,来语义特征定义分析器赋值和初始化;
步骤S400:输入需要转换的源代码文件002,读取出源代码的代码变成一个string,把这个string提供给语言转换处理器003;
步骤S500:语言转换处理器003根据输入的源代码文件,得到源代码文件的后缀名字,如果是.cs则是c#,如果是C#文件,则创建一个C#对应的源语言特征定义主体004;
步骤S600:语言转换处理器003选择一种输出的目标语言003-1,一般通过界面UI或者命令行输入的参数,定义输出是哪种语言,比如通过命令行output as3,告诉编辑器输出AS3文件,创建一个AS3语言的目标语言特征定义主体007;
在步骤S700开始前,源语言特征定义主体004拿到步骤S400的源代码string,进行去除无用空格、无用换行操作;
步骤S700:用源语义特征定义分析器005不间断循环分解源代码的string,目标代码的string被不断添加,直到产生一个完整的转换完成的string;
进一步的,所述步骤S700具体包括:
步骤S701:对每一种源语义特征定义分析器005进行排序,包括将类定义、结构体定义、枚举定义、注释定义、宏定义、引用定义、名词空间定义设定为高优先级,因为一个源代码最开始100%是这几个特征,其余的分析器则根据经验向后排序,因为需要在代码的比较深的层次才能用到它们;
步骤S702:逐个遍历每一种源语义特征定义分析器005,去判断步骤S400得到的源代码string,每一个语义特征定义分析器005使用之前,语言描述配置文件001定义过的关键词会去判断是否该由这个语义特征定义分析器005去分解代码;
步骤S703:如果某一个源语义特征定义分析器005,判断该种类型的分析器是否认识这一句代码,不认识这段代码,则换下一个定义解析器继续判断,判断是则可以分解代码,比如代码开始部分是namespace Light37.ObjectSystem.Enums,这样一句代码,由于满足了名词空间分析器的,特征定义[define:namespace],所以会由它分解掉代码,同时由于它还需要一个namespace_name的名词空间变量,它会继续分解掉后面跟着的文本,直至遇到代码的定义结束符号,[define:#end#{]“{”;由于之前名词空间分析器接管了输入的string,并且分解掉了它认识的代码,string会剩下“{”之后的代码,交由后续的其他分析器继续分解;
步骤S704:之前成功分解掉一部分代码的分析器,把代码转换为语言特征定义过的数据变量,即完成代码转换特征描述方法006;
如之前的名词空间分析器,吃了namespace Light37.ObjectSystem.Enums这段代码,根据名词空间分析器的定义,[define:namespace],匹配调名词空间关键词namespace,根据分析器需要一个namspace_name,剩下的代码都认为是它的名字,为namespace_name=Light37.ObjectSystem.Enums;
步骤S705:请求目标语言特征定义主体007,调度一个和源代码分析器一样类型的目标代码分析器;如这次是名词空间分析器,则得到一个对应的AS3版本的名词空间分析器分析器,判断目标语言是否支持这种特征,如果为否(如源语言支持泛型编程,目标语言不支持),说明这个代码文件不能被自动转换,就报错提示开发人员需要维护这个文件内容;
步骤S706:把源语义特征定义分析器005得到的对应数据复制给目标语义特征定义分析器;
如前文提到namespace_name=Light37.ObjectSystem.Enums,复制给AS3目标代码的对应解析器,让目标代码分析器的名字空间定义器的namespace_name=Light37.ObjectSystem.Enums,这样目标代码的名词空间分析器也有了自己的数据;
步骤S707:目标语义特征定义分析器008在得到对应的定义数据,根据配置文件001定义的特征定义,执行代码转换函数模板,来产生对应的目标代码,即完成特征描述转换代码方法009;
如前文提到目标AS3代码的名词空间分析器[define:package],它对应转换的格式就是package+namespace_name,即:package Light37.ObjectSystem.Enums。这样的一句string代码,它正好就是AS3语言对应的声明名词空间代码;
步骤S708:目标语言特征定义主体007申请一个string作为输出代码文本;
步骤S709:调用目标语义特征定义分析器008的ToString()函数,即特征描述转换代码方法009,在这个string里面追加产生的新代码;如前文AS3的名词空间分析器,会产出package Light37.ObjectSystem.Enums这句代码,则新的string目标代码变成string+=“package Light37.ObjectSystem.Enums”;
步骤S700的最后,判断当前输入的代码文件是否全部分析完成,代码没有分析完,继续循环;
步骤S800:把产生出来的string保存为目标代码文件,即目标代码文件保存处理010,至此整个代码分析过程转换完毕。
综上所述,采用本发明具备以下优点:
1、使用解析型语言文本式分析转换可以提高人员的稳定性,类似企业之前有大量的flash程序员学习的都是AS3,且之前的项目已经开发和积累了大量的AS3代码,让他们重新学习新的多种开发语言,很容易让员工感到沮丧,且耗时。使用解析型语言文本式分析转换方法,可以轻松的正确的把多年开发过的项目代码转换为新的客户端环境代码,不用立马大量学习,企业也不用额外的花大量时间去让项目转型,也不用额外的招聘新的员工开发其他客户端环境,只需要简单的配置和定义源代码和目标代码的特征定义。
2、该发明可以极大的简化结构,正如前文所述,选择重新编写一次其他客户端环境的代码,会导致一个项目多份代码,且非常有可能由于不同的人员开发,即使开发文档一致,也会出现不一样的实现方式而到项目在不同客户端环境出现不稳定,项目管理难度将会大增,通过工具而不是通过人去自动化的产生逻辑性一致的代码,将极大的简化项目管理代价,项目结构,降低成本,降低故障率。
3、这项发明改进还能提高项目的可控性,正如前文所述,即使使用虚拟机等技术去做平台无关开发,但是由于不是目标客户端环境的推荐开发语言,或多或少都会有性能,稳定性等问题出现,一旦出现,由于没有目标客户端环境的代码(虚拟机不提供),项目组要解决这类性能和异常往往束手无策,但是有一份原生代码,可以很好的结合官方的调试工具,IDE等发现和解决性能问题显示异常,提高稳定性。
4、解析型语言文本式分析转换方法,是一个纯粹的代码转换办法,是原生态不应担心任何适配问题,是一种更加高级,更方便的跨平台,跨客户端环境开发解决方法,具体极高的先进性。
以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明内。本发明要求保护范围由所附的权利要求书及其等效物界定。

Claims (5)

1.一种解析型语言文本式分析转换方法,其特征在于:包括以下步骤:
步骤S100:罗列出所有客户端环境用到的编程语言,把语言分解为23种语言特征定义,为每一种支持的语言配置相关的语言描述配置文件;
步骤S200:分析转换器会把支持的语言的各种特征读取到分析转换器,即读取语言描述配置文件;
步骤S300:根据配置特征初始化每一个特征对应的解析类,并按照对应23个特征定义的关键字,来语义特征定义分析器赋值和初始化;
步骤S400:输入需要转换的源代码文件,读取出源代码的代码变成一个string,把这个string提供给语言转换处理器;
步骤S500:根据输入的源代码文件,创建源语言特征定义主体;
步骤S600:选择一种输出的目标语言,创建目标语言特征定义主体;
步骤S700:用源语义特征定义分析器不间断循环分解源代码的string,目标代码的string被不断添加,直到产生一个完整的转换完成的string;
步骤S800:把产生出来的string保存为目标代码文件,即目标代码文件保存处理,至此整个代码分析过程转换完毕;
所述步骤S700具体包括:
步骤S701:对每一种源语义特征定义分析器进行排序;
步骤S702:逐个遍历每一种源语义特征定义分析器,去判断步骤S400得到的源代码string;
步骤S703:如果某一个源语义特征定义分析器,判断可以分解代码,直至遇到代码的定义结束符号,[define:#end#{] “{”,string会剩下“{”之后的代码,交由后续的其他分析器继续分解;
步骤S704:成功分解掉一部分代码的分析器,把代码转换为语言特征定义过的数据变量,即完成代码转换特征描述方法;
步骤S705:请求目标语言特征定义主体,调度一个和源代码分析器一样类型的目标代码分析器;
步骤S706:把源语义特征定义分析器得到的对应数据复制给目标语义特征定义分析器;
步骤S707:目标语义特征定义分析器在得到对应的定义数据,根据配置文件定义的特征定义,执行代码转换函数模板,来产生对应的目标代码,即完成特征描述转换代码方法;
步骤S708:目标语言特征定义主体申请一个string作为输出代码文本;
步骤S709:调用目标语义特征定义分析器的ToString()函数,即特征描述转换代码方法,在这个string里面追加产生的新代码。
2.根据权利要求1所述的一种解析型语言文本式分析转换方法,其特征在于:所述23种语言特征定义包括:类定义、结构体定义、枚举定义、注释定义、语义标签定义、宏定义、特殊字符定义、名词空间定义、引用定义、托管定义、属性定义、函数定义、成员变量定义、循环定义、临时变量定义、判断语句定义、运算符号定义、语法关键字定义、强制类型转换定义、数字和字符定义、命令语句定义、参数定义、访问权限定义。
3.根据权利要求1所述的一种解析型语言文本式分析转换方法,其特征在于:所述步骤S701中将类定义、结构体定义、枚举定义、注释定义、宏定义、引用定义、名词空间定义设定为高优先级,其余的分析器则根据经验向后排序。
4.根据权利要求1所述的一种解析型语言文本式分析转换方法,其特征在于:所述步骤S702中,每一个语义特征定义分析器使用之前,语言描述配置文件定义过的关键词会去判断是否该由这个语义特征定义分析器去分解代码。
5.根据权利要求1所述的一种解析型语言文本式分析转换方法,其特征在于:所述步骤S700开始前,源语言特征定义主体拿到步骤S400的源代码string,进行去除无用空格、无用换行操作。
CN201811624663.5A 2018-12-28 2018-12-28 一种解析型语言文本式分析转换方法 Active CN109739512B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811624663.5A CN109739512B (zh) 2018-12-28 2018-12-28 一种解析型语言文本式分析转换方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811624663.5A CN109739512B (zh) 2018-12-28 2018-12-28 一种解析型语言文本式分析转换方法

Publications (2)

Publication Number Publication Date
CN109739512A CN109739512A (zh) 2019-05-10
CN109739512B true CN109739512B (zh) 2022-04-12

Family

ID=66361910

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811624663.5A Active CN109739512B (zh) 2018-12-28 2018-12-28 一种解析型语言文本式分析转换方法

Country Status (1)

Country Link
CN (1) CN109739512B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112783479A (zh) * 2019-11-04 2021-05-11 拜椰特(上海)软件技术有限公司 计算机编程语言访问方法
CN110968634B (zh) * 2019-12-03 2024-02-02 普元信息技术股份有限公司 大数据场景下基于xml描述实现利用可编程函数式进行etl转换处理的方法
CN112528656A (zh) * 2020-12-23 2021-03-19 安徽航天信息有限公司 基于条件分词的权限控制方法、装置、***及存储介质
CN113961238A (zh) * 2021-10-27 2022-01-21 国网信息通信产业集团有限公司 对象转换方法、装置及电子设备和存储介质
CN115658511B (zh) * 2022-10-27 2023-08-29 豫章师范学院 一种源代码的执行行为的监控方法和***

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101208660A (zh) * 2005-06-27 2008-06-25 奎朴兹有限公司 代码转换
CN102830975A (zh) * 2012-08-15 2012-12-19 深圳市翌日科技有限公司 一种汇编语言到高级语言的代码转换方法和装置
CN103150200A (zh) * 2013-04-08 2013-06-12 西安电子科技大学 一种计算机语言转换***及c语言到msvl语言的转换方法
CN106919434A (zh) * 2017-03-22 2017-07-04 恒生电子股份有限公司 一种代码生成方法及装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106293677B (zh) * 2015-06-08 2019-09-27 阿里巴巴集团控股有限公司 一种代码转换方法及装置
CN105005496B (zh) * 2015-06-25 2018-05-08 桂林力港网络科技有限公司 一种跨语言转换网络数据包定义文件的处理***及方法
WO2017017738A1 (ja) * 2015-07-24 2017-02-02 富士通株式会社 符号化プログラム、符号化装置、及び符号化方法
RU2016137177A (ru) * 2016-09-16 2018-03-19 Оракл Интернэйшнл Корпорейшн Усовершенствованное преобразование исходного кода языка программирования

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101208660A (zh) * 2005-06-27 2008-06-25 奎朴兹有限公司 代码转换
CN102830975A (zh) * 2012-08-15 2012-12-19 深圳市翌日科技有限公司 一种汇编语言到高级语言的代码转换方法和装置
CN103150200A (zh) * 2013-04-08 2013-06-12 西安电子科技大学 一种计算机语言转换***及c语言到msvl语言的转换方法
CN106919434A (zh) * 2017-03-22 2017-07-04 恒生电子股份有限公司 一种代码生成方法及装置

Also Published As

Publication number Publication date
CN109739512A (zh) 2019-05-10

Similar Documents

Publication Publication Date Title
CN109739512B (zh) 一种解析型语言文本式分析转换方法
US20070038978A1 (en) Layered type systems
Favre Preprocessors from an abstract point of view
Cánovas Izquierdo et al. A domain specific language for extracting models in software modernization
Shah et al. Natural language to python source code using transformers
Schröer The GENTLE Compiler Construction System
US20080141230A1 (en) Scope-Constrained Specification Of Features In A Programming Language
Quesada et al. A language specification tool for model-based parsing
Griswold et al. Managing design trade-offs for a program understanding and transformation tool
García-Pradales et al. An s (CASP) In-Browser Playground based on Ciao Prolog.
Atsumi et al. An XML C source code interchange format for CASE tools
Marin et al. Towards a framework for generating program dependence graphs from source code
Visser Understanding software through linguistic abstraction
Malabarba et al. MoHCA-Java: a tool for C++ to Java conversion support
KR20230040516A (ko) 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법
Sorgatz Dynamic Modules: User’s Manual and Programming Guide for MuPAD 1.4
Hackman et al. mel-model extractor language for extracting facts from models
McNamara Rust in Action
Sinclair et al. The philosophy of LISP
Steimann Replacing phrase structure grammar with dependency grammar in the design and implementation of programming languages
Gomanyuk An approach to creating development environments for a wide class of programming languages
CN114265582A (zh) 一种领域特定语言设计方法、装置、设备及存储介质
Slepak A Typed Programming Language: The Semantics of Rank Polymorphism
Youn et al. Bringing the WebAssembly Standard up to Speed with SpecTec
Blanc et al. Outilex Platform Graphical Interface. User Guide

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
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20230310

Address after: No. 7015, Floor 7, Building B1, Wanjiang Fortune Plaza, 88 Ruixiang Road, Guandou Street, Jiujiang District, Wuhu City, Anhui Province, 241060

Patentee after: Anhui Sanqi Jiyu Network Technology Co.,Ltd.

Address before: 223001 Room 501, building 4, No. 266 Chengde South Road (Huai'an Software Park), Huai'an Economic and Technological Development Zone, Huai'an City, Jiangsu Province

Patentee before: JIANGSU JIGUANG NETWORK TECHNOLOGY Co.,Ltd.