CN113157262A - 代码生成方法、装置、代码生成器以及存储介质 - Google Patents
代码生成方法、装置、代码生成器以及存储介质 Download PDFInfo
- Publication number
- CN113157262A CN113157262A CN202110448115.7A CN202110448115A CN113157262A CN 113157262 A CN113157262 A CN 113157262A CN 202110448115 A CN202110448115 A CN 202110448115A CN 113157262 A CN113157262 A CN 113157262A
- Authority
- CN
- China
- Prior art keywords
- code
- policy
- channel
- channels
- strategy
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/33—Intelligent editors
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请公开了一种代码生成方法、装置、代码生成器以及存储介质,该方法包括:获取配置文件,配置文件包括N个渠道的配置信息,每个渠道的配置信息在配置文件中以关键字和值的形式设置,每个渠道的配置信息包括渠道名称和至少一个策略组,接着对配置文件进行解析,分别将解析出的每个渠道的配置信息增加语义后拼接为符合预设语法的代码块,得到N个渠道的代码块,N个渠道的代码块包括N个渠道的渠道名称和N个渠道的代码块的映射关系,将N个渠道的代码块分别填入N个渠道的代码模板,生成N个渠道的源代码。从而,可根据配置文件自动生成每个渠道的源代码,简化了源代码的生成过程,效率高且具有较好的灵活性。
Description
技术领域
本申请涉及互联网技术领域,尤其涉及一种代码生成方法、装置、代码生成器以及存储介质。
背景技术
广告投放是互联网常见的一种信息传播方式,目前,大多数广告主趋向于通过媒体投放广告,媒体比如社交媒体、资讯媒体和视听媒体等。在广告主投放广告的过程中,媒体服务器检测到一条流量时,向广告主服务器发送广告竞投请求,该广告竞投请求携带广告位信息和该条流量对应的用户信息。广告主服务器接收到广告竞投请求后,对广告竞投请求对应的流量先根据预先设置的分流条件分流,确定流量流经的策略组,然后再根据该策略组进行流量筛选,确定是否要投放广告,并将确定的结果和出价价格(确定投放时)返回给媒体服务器。
上述流量筛选过程是通过源代码来实现,相关技术中,是由开发人员根据分流条件和策略组编写源代码,但是,策略组的划分或者策略组中的某些策略会随着应用场景或其他因素发生变化,比如策略组的新增或删除,某些策略组中的策略的改变等,此时需要重新编写源代码,源代码的生成过程较复杂,灵活性较差,效率较低。
发明内容
本申请提供一种代码生成方法、装置、代码生成器以及存储介质,以解决用于进行流量筛选的源代码的生成过程较复杂、灵活性较差以及效率较低的问题。
第一方面,本申请提供一种代码生成方法,包括:
获取配置文件,所述配置文件包括N个渠道的配置信息,所述N为大于或等于1的正整数,每个渠道的配置信息在所述配置文件中以关键字和值的形式设置,每个渠道的配置信息包括渠道名称和至少一个策略组,每个策略组包括策略组名称、分流参考值、作用域为本策略组的变量、本策略组的策略列表和经过本策略组过滤后执行的操作,所述本策略组的策略列表中的一个策略包括策略名称、策略优先级、在满足策略内容时是否终止当前策略组的过滤的指示、作用域为本策略及优先级更低的策略的变量和所述策略内容;
对所述配置文件进行解析,分别将解析出的每个渠道的配置信息增加语义后拼接为符合预设语法的代码块,得到所述N个渠道的代码块,所述N个渠道的代码块包括所述N个渠道的渠道名称和所述N个渠道的代码块的映射关系;
将所述N个渠道的代码块分别填入所述N个渠道的代码模板,生成所述N个渠道的源代码。
可选的,所述对所述配置文件进行解析,包括:
按照所述配置文件的结构由外层向内层查找的方式,根据预设关键字从所述每个渠道的配置信息中查找对应的值,所述预设关键字为所述每个渠道的配置信息中的关键字。
可选的,所述每个渠道的配置信息还包括策略标识类型、日志所需字段和作用域为本渠道的变量,所述作用域为本渠道的变量包括变量类型、变量名称和变量的值,所述分别将解析出的每个渠道的配置信息增加语义后拼接为符合预设语法的代码块,得到所述N个渠道的代码块,包括:
通过如下方式分别确定所述N个渠道的代码块中的每个渠道的代码块:
根据一个渠道的各个策略组名称构造策略组转化成的方法的声明,得到第一代码块;
根据一个渠道的变量类型和变量名称构造变量的声明,得到第二代码块;
使用一个渠道的变量类型、变量名称和变量的值拼接对渠道范围内变量的定义,得到第三代码块;
拼接一个渠道的各个策略组解析出的方法,得到第四代码块;
拼接绑定方法的代码,得到第五代码块;
拼接所述第一代码块、所述第二代码块、所述第三代码块、所述第四代码块和所述第五代码块,得到一个渠道的代码块。
可选的,所述拼接一个渠道的各个策略组解析出的方法,包括:
对每个策略组,根据所述策略标识类型确定存放策略标识的数据结构内元素的类型,拼接所述作用域为本策略组的变量;
解析所述策略组内各个策略对应的代码,得到方法体;
解析所述策略组内所述经过本策略组过滤后执行的操作对应的代码;
根据所述策略组内所述日志所需字段的类型拼接写日志的代码,所述日志所需字段的类型包括第一类型和第二类型,所述第一类型为指示日志中是否包括预设字段根据能否在数据库中查到用户信息决定,所述第二类型为指示日志中包括所述预设字段。
可选的,所述解析所述策略组内各个策略对应的代码,得到方法体,包括:
对所述策略组内的每个策略,将一个策略的所述策略内容放入一个if的条件部分,将所述作用域为本策略及优先级更低的策略的变量放在if的条件部分之前,得到一个策略对应的if代码和变量;
缓存所述策略组内的每个策略对应的if代码和变量,并按照每个策略的优先级从大到小的顺序对每个策略对应的if代码和变量排序;
在所述策略组内的所有策略对应的if代码和变量缓存完时,按照缓存的排序顺序拼接每个策略对应的if代码和变量,得到所述方法体;
根据所述策略组内的每个策略的在满足所述过滤条件时是否终止当前策略组的过滤的指示,确定是否在满足if条件的代码末尾添加用于指示终止的代码,并根据所述方法体内所有的if条件限定所述用于指示终止的代码。
可选的,所述N个渠道的代码模板包括所述N个渠道的渠道名称和所述N个渠道的代码模板的对应关系,每个渠道的代码模板包括固定代码和变量,所述将所述N个渠道的代码块分别填入所述N个渠道的代码模板,生成所述N个渠道的源代码,包括:
根据所述N个渠道的渠道名称和所述N个渠道的代码块的映射关系以及所述N个渠道的渠道名称和所述N个渠道的代码模板的对应关系,确定所述N个渠道的代码模板和所述N个渠道的代码块的对应关系;
将每个渠道的代码块分别填入对应渠道的代码模板中的变量的位置,生成所述N个渠道的源代码。
第二方面,本申请提供一种代码生成装置,包括:
获取模块,用于获取配置文件,所述配置文件包括N个渠道的配置信息,所述N为大于或等于1的正整数,每个渠道的配置信息在所述配置文件中以关键字和值的形式设置,每个渠道的配置信息包括渠道名称和至少一个策略组,每个策略组包括策略组名称、分流参考值、作用域为本策略组的变量、本策略组的策略列表和经过本策略组过滤后执行的操作,所述本策略组的策略列表中的一个策略包括策略名称、策略优先级、在满足策略内容时是否终止当前策略组的过滤的指示、作用域为本策略及优先级更低的策略的变量和所述策略内容;
处理模块,用于对所述配置文件进行解析,分别将解析出的每个渠道的配置信息增加语义后拼接为符合预设语法的代码块,得到所述N个渠道的代码块,所述N个渠道的代码块包括所述N个渠道的渠道名称和所述N个渠道的代码块的映射关系;
生成模块,用于将所述N个渠道的代码块分别填入所述N个渠道的代码模板,生成所述N个渠道的源代码。
可选的,所述处理模块用于按照所述配置文件的结构由外层向内层查找的方式,根据预设关键字从所述每个渠道的配置信息中查找对应的值,所述预设关键字为所述每个渠道的配置信息中的关键字。
可选的,所述每个渠道的配置信息还包括策略标识类型、日志所需字段和作用域为本渠道的变量,所述作用域为本渠道的变量包括变量类型、变量名称和变量的值,所述处理模块用于:通过如下方式分别确定所述N个渠道的代码块中的每个渠道的代码块:
根据一个渠道的各个策略组名称构造策略组转化成的方法的声明,得到第一代码块;
根据一个渠道的变量类型和变量名称构造变量的声明,得到第二代码块;
使用一个渠道的变量类型、变量名称和变量的值拼接对渠道范围内变量的定义,得到第三代码块;
拼接一个渠道的各个策略组解析出的方法,得到第四代码块;
拼接绑定方法的代码,得到第五代码块;
拼接所述第一代码块、所述第二代码块、所述第三代码块、所述第四代码块和所述第五代码块,得到一个渠道的代码块。
可选的,所述处理模块用于:对每个策略组,根据所述策略标识类型确定存放策略标识的数据结构内元素的类型,拼接所述作用域为本策略组的变量;
解析所述策略组内各个策略对应的代码,得到方法体;
解析所述策略组内所述经过本策略组过滤后执行的操作对应的代码;
根据所述策略组内所述日志所需字段的类型拼接写日志的代码,所述日志所需字段的类型包括第一类型和第二类型,所述第一类型为指示日志中是否包括预设字段根据能否在数据库中查到用户信息决定,所述第二类型为指示日志中包括所述预设字段。
可选的,所述处理模块用于:对所述策略组内的每个策略,将一个策略的所述策略内容放入一个if的条件部分,将所述作用域为本策略及优先级更低的策略的变量放在if的条件部分之前,得到一个策略对应的if代码和变量;
缓存所述策略组内的每个策略对应的if代码和变量,并按照每个策略的优先级从大到小的顺序对每个策略对应的if代码和变量排序;
在所述策略组内的所有策略对应的if代码和变量缓存完时,按照缓存的排序顺序拼接每个策略对应的if代码和变量,得到所述方法体;
根据所述策略组内的每个策略的在满足所述过滤条件时是否终止当前策略组的过滤的指示,确定是否在满足if条件的代码末尾添加用于指示终止的代码,并根据所述方法体内所有的if条件限定所述用于指示终止的代码。
可选的,所述N个渠道的代码模板包括所述N个渠道的渠道名称和所述N个渠道的代码模板的对应关系,每个渠道的代码模板包括固定代码和变量,所述生成模块用于:
根据所述N个渠道的渠道名称和所述N个渠道的代码块的映射关系以及所述N个渠道的渠道名称和所述N个渠道的代码模板的对应关系,确定所述N个渠道的代码模板和所述N个渠道的代码块的对应关系;
将每个渠道的代码块分别填入对应渠道的代码模板中的变量的位置,生成所述N个渠道的源代码。
第三方面,本申请提供一种代码生成器,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行第一方面或第一方面各可能的实施方式中任一所述的代码生成方法。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面或第一方面各可能的实施方式中任一所述的代码生成方法。
第五方面,本申请实施例提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现第一方面或第一方面各可能的实施方式中任一所述的代码生成方法。
本申请提供的代码生成方法、装置、代码生成器以及存储介质,通过获取配置文件,对配置文件进行解析,分别将解析出的每个渠道的配置信息增加语义后拼接为符合预设语法的代码块,得到N个渠道的代码块,将N个渠道的代码块分别填入N个渠道的代码模板,生成N个渠道的源代码,每个渠道的配置信息包括渠道名称和至少一个策略组。从而,可根据配置文件自动生成每个渠道的源代码,当需要增加或者删减渠道,或者对一个渠道中的策略组进行增加或删减,或者对一个渠道中的策略组中的策略进行修改,只需要修改配置文件,将修改后的配置文件输入到代码生成器中,代码生成器根据修改后的配置文件重新生成每个渠道的源代码,简化了源代码的生成过程,效率高且具有较好的灵活性。
附图说明
图1为本申请实施例提供的代码生成方法的一种应用场景示意图;
图2为本申请实施例提供的一种流量筛选的过程示意图;
图3为本申请实施例提供的一种代码生成方法的流程图;
图4为本申请实施例提供的一种代码生成方法的流程图;
图5为本申请实施例提供的一种代码生成装置的结构示意图;
图6为本申请实施例提供的一种代码生成器的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出。下面通过参考附图描述的实施例是示例性的,旨在用于解释本申请,而不能理解为对本申请的限制。
本申请实施例的说明书、权利要求书及附图中的术语“第一”和“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请实施例的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,下面对本申请实施例中的部分用语进行解释说明,以便于本领域技术人员理解。
1、分流,对流量按某个标准进行划分,每条流量只会流经一个策略组。
2、策略,为流量筛选策略,通过策略的含义为满足该策略的全部条件,通过后会引发策略对应的操作,若没有通过,则不受此策略影响。
3、渠道,为网络获客的渠道,如各类媒体。
相关技术中,用于进行流量筛选的源代码是由开发人员根据分流条件和策略组编写的,当策略组的划分或者策略组中的某些策略发生变化时,需要重新编写源代码,源代码的生成过程较复杂,灵活性较差,效率较低。为解决这一问题,本申请实施例提供一种代码生成方法、装置、代码生成器以及存储介质,通过将多个渠道的配置信息按照设定结构形成一配置文件,每个渠道的配置信息在配置文件中以关键字和值的形式设置,每个渠道的配置信息包括渠道名称和至少一个策略组,并预存每个渠道的代码模板在代码生成器中,代码生成器在接收到配置文件后,解析配置文件得到每个渠道的配置信息,并分别将解析出的每个渠道的配置信息增加语义后拼接为符合预设语法的代码块,得到每个渠道的代码块,将每个渠道的代码块分别填入对应渠道的代码模板,生成每个渠道的源代码。每个渠道的源代码用于对来自对应渠道的流量进行流量筛选,并输出是否要投放广告和投放广告时的出价价格。当需要增加或者删减渠道,或者对一个渠道中的策略组进行增加或删减,或者对一个渠道中的策略组中的策略进行修改,只需要修改配置文件,将修改后的配置文件输入到代码生成器中,代码生成器根据修改后的配置文件重新生成每个渠道的源代码,简化了源代码的生成过程,效率高且具有较好的灵活性。下面结合附图对本申请提供的代码生成方法的具体过程进行详细说明。
接下来,对本申请实施例涉及的应用场景进行示例说明。
本申请实施例提供的代码生成方法至少可以应用于下述应用场景中,下面结合附图进行说明。
示例性的,图1为本申请实施例提供的代码生成方法的一种应用场景示意图,如图1所示,本实施例的应用场景中涉及广告主服务器1和媒体服务器2。其中,广告主服务器1和媒体服务器2之间可以通过无线或有线的方式基于互联网协议进行通信。
其中,广告主服务器1提供一种广告主服务平台,服务于具有广告投放需求的广告主,广告主可以在平台上设置广告的目标受众、投放区域和广告出价等。
媒体服务器2提供一种为媒体信息的广告投放进行全方位的分析和管理的平台,媒体服务器2可以管理自己的广告位,控制广告的投放以及展现等。
在广告主投放广告的过程中,媒体服务器2检测到一条流量时,该条流量是用户通过代码生成器访问媒体服务器2产生的流量,媒体服务器2向广告主服务器1发送广告竞投请求,该广告竞投请求携带广告位信息和该条流量对应的用户信息,用户信息包括用户标识、用户所使用的代码生成器的设备号和用户的属性信息(包括年龄、性别和地域等等)等。广告主服务器1接收到广告竞投请求后,对广告竞投请求对应的流量先根据预先设置的分流条件分流,确定流量流经的策略组,然后再根据该策略组进行流量筛选,确定通过了策略组中的哪些策略,并执行当前策略组过滤后执行的操作,如将广告竞投响应(包括通过的策略和出价价格)返回给媒体服务器2。若通过的策略为0,则媒体服务器2确定不投放广告给这一广告竞投请求对应的流量,若通过的策略为至少一个,则媒体服务器2可确定投放广告给这一广告竞投请求对应的流量,还可获知该广告主竞投广告的出价价格。媒体服务器2根据不同广告主的出价价格与竞价规则,确定最终投放哪个广告主的广告。
其中,广告主服务器1对广告竞投请求对应的流量先根据预先设置的分流条件分流,确定流量流经的策略组,然后再根据该策略组进行流量筛选,确定通过了策略组中的哪些策略,并执行经过当前策略组过滤后执行的操作。这一过程为流量筛选的过程,该流量筛选的过程可通过源代码实现,本申请实施例提供的代码生成方法可用于生成该源代码。生成的源代码可集成在广告主服务器侧,用来实现流量筛选的过程。
图2为本申请实施例提供的一种流量筛选的过程示意图,本实施例示出了一个渠道A的流量筛选的过程,如图2所示,广告主服务器接收到分别来自三个用户的广告竞投请求,每个广告竞投请求对应一条流量,三条流量携带的用户标识分别为357、39和188,A、B、C是用户的三个标签,其中标签是用户的属性或某个维度的打分,每个用户有多个标签。本实施例中,渠道A的配置信息包括渠道名称和两个策略组,渠道名称为A,分流条件包括分流字段和分流参考值,本实施例中以用户标识(ID)作为分流字段,用户标识对100取余后的值作为分流参考值。两个策略组为策略组1和策略组2,策略组1和策略组2的分流参考值分别为50和100。策略组1的分流参考值为50是指策略组1负责接收分流参考值在[0,50]范围内的流量,策略组2的分流参考值为100是指策略组2负责接收分流参考值在[50,100]范围内的流量。策略组1包括3个策略:策略1、策略2和策略3,策略组2包括3个策略:策略4和策略5。每个策略包括策略名称、策略优先级、在满足策略内容时是否终止当前策略组的过滤的指示、作用域为本策略及优先级更低的策略的变量和策略内容,5个策略的信息如下表1所示,其中作用域为本策略及优先级更低的策略的变量表一中未示出。
表一5个策略的信息
其中,true指示在满足过滤条件时终止当前策略组的过滤,false指示在满足过滤条件时不终止当前策略组的过滤。
根据本实施例的分流条件和上述策略组中策略的信息,每条流量对应的用户标识对100取余后的值作为每条流量的分流参考值,策略组1负责接收分流参考值在[0,50]范围内的流量,策略组2负责接收分流参考值在[50,100]范围内的流量,上述三条流量经过分流之后,可确定用户标识分别为357和39的两条流量流经策略组1,用户标识为188的一条流量流经策略组2。通过策略组进行流量筛选,图2中每条带箭头的曲线标示了每条流量通过的策略,用户标识为357的流量通过了策略组1中的策略1和策略2,用户标识为39的流量通过了策略组1中的策略2,用户标识为188的流量通过了策略组2中的策略5,每条带箭头的曲线绕过的策略表示不符合过滤条件或因满足前一个策略的过滤条件而退出了过滤。图2中的动作表示执行经过当前策略组过滤后执行的操作,如返回通过了当前策略组中的哪些策略,或者返回通过了当前策略组中的哪些策略和出价价格。本申请实施例提供的代码生成方法可用于生成用于实现图2所示流量筛选的过程的源代码。
需要说明的是,图2所示仅是一种示例,并不构成对本申请的限定。
下面以具体的实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
图3为本申请实施例提供的一种代码生成方法的流程图,该代码生成方法可以由代码生成装置执行,该代码生成装置可以通过软件和/或硬件的方式实现。该代码生成装置可以是代码生成器的芯片或电路。如图3所示,本实施例的方法可以包括:
S101、获取配置文件,配置文件包括N个渠道的配置信息,N为大于或等于1的正整数,每个渠道的配置信息在配置文件中以关键字和值的形式设置,每个渠道的配置信息包括渠道名称和至少一个策略组,每个策略组包括策略组名称、分流参考值、作用域为本策略组的变量、本策略组的策略列表和经过本策略组过滤后执行的操作,本策略组的策略列表中的一个策略包括策略名称、策略优先级、在满足策略内容时是否终止当前策略组的过滤的指示、作用域为本策略及优先级更低的策略的变量和策略内容。
具体地,获取配置文件可以是接收输入的配置文件,配置文件包括N个渠道的配置信息,每个渠道的配置信息包括渠道名称、分流条件和至少一个策略组,可选的,每个渠道的配置信息还可以包括策略标识类型、日志所需字段和作用域为本渠道的变量。
每个渠道的配置信息在配置文件中以关键字和值的形式设置,作为一种可实施的方式,下述为一种配置文件的示例:
如上所示的配置文件结构中,一个配置文件包括N个渠道的配置信息,各个渠道在配置文件中是并列的关系,每个渠道的配置信息按相同格式书写,在设置时可以对不需要的部分灵活做取舍。以“渠道1”为例,“渠道1”下包括一个渠道可以配置的全部信息,“…”表示可有多个。上述配置文件结构中给出了一种渠道、策略组和策略三个层级配置的格式,渠道内配置多个策略组和每个组会接收哪一部分流量,如分组名称和分流参考值为设置的策略组的分组名称,该策略组会接收哪一部分流量是根据分流参考值来确定。策略组的区别可以是所包含的策略之间关系、策略组级的操作(即经过本策略组过滤后执行的操作)和策略级的操作(即若满足策略内容执行的操作)中的至少一项不同。设置多个策略组的目的,可以是为决定构成策略的标签及取值,进行对照实验,分析对照组和实验组的广告投放结果,还可以是按某条件对流量分类,每类流量流经对应的策略组。
在设置策略组时,可以通过对分流字段和分流参考值进行不同的配置来实现,分流字段可以选择取值有意义的字段,分流参考值控制某类流量的流向。作为一种可实施的方式,分流字段可以取设备号的MD5的哈希值(具体哈希算法是murmurhash),这时分流参考值的作用是控制流经本组流量的大小。例如,对照实验时可分为三个策略组,如上所示的配置文件中“渠道2”的配置信息中,设置各策略组的分流参考值分别为98、99、100,表示[0,98)、[98,99)、[99,100)这三部分流量,分别由默认组、对照组、实验组处理,在不影响服务的前提下,只抽调小部分流量进行实验。需要说明的是,“渠道2”的配置信息中,是对分流的举例说明,对配置信息的其他部分做了省略未示出。可选的,在不需要分流时,可以设置一个策略组,并配置分流参考值取分流字段的最大可能取值。作为另一种可实施的方式,分流字段可以取用户标识,用户标识对100取余后的值作为分流参考值。
如上所示的配置文件结构中,“渠道1”内配置“作用域为本渠道的变量”,为“渠道1”内各策略组共用。“渠道1”内配置“日志所需字段”为本渠道所需的日志字段,其中日志所需字段的值可以来自请求、来自数据库或来自决策过程中的变量。
如上所示的配置文件结构中,一个策略组包括策略组名称、分流参考值、作用域为本策略组的变量、本策略组的策略列表和经过本策略组过滤后执行的操作,其中,经过本策略组过滤后执行的操作可以是返回过滤结果,例如可以是返回是否成功走完过滤流程,可以是返回通过了策略组中的哪些策略,或者返回通过了策略组中的哪些策略和出价价格。还可以是根据本组策略的通过情况,执行不同的动作,例如,如果没有通过任何一个策略,执行negative对应的操作,如果通过了至少一个,执行positive对应的操作。可选的,positive对应的操作,可以配置为因具体通过的策略不同而有所不同。若通过的策略里有需要个性化出价的(需要在渠道级变量里配置需要自动出价的计划ID,以供比对),根据个性化出价依赖的一个或多个标签的值,找出出价系数(需要在渠道级变量里配置标签值和出价系数的映射关系)。
本策略组的策略列表中的一个策略包括策略名称(如为策略1)、策略优先级(如为9000)、在满足策略内容时是否终止当前策略组的过滤的指示(如为true)、作用域为本策略及优先级更低的策略的变量和策略内容。
其中,策略优先级可以为整数类型,优先级的数值越大表示优先级越高,流量优先流过。每个策略组对应一个策略的优先级排序。在满足策略内容时是否终止当前策略组的过滤的指示可以为布尔类型,例如true表示若满足策略内容终止当前策略组的过滤(即停止流向本策略组其他优先级更低的策略,本组过滤结束);false表示若满足策略内容不终止当前策略组的过滤(即继续流向本策略组优先级更低的策略)。若不满足策略表达式继续流向本策略组优先级更低的策略(此逻辑可以在解析工具里实现)。
其中,策略内容可以包括一个策略表达式,策略表达式由多个标签、运算符和取值组成,是过滤的核心,可选的,可以计算个性化系数,作用于策略表达式的某个标签,使过滤条件有所区别。
其中,作用域为本策略及优先级更低的策略的变量,是指:构成策略表达式的条件组合如果多次出现,可在其中优先级最高的策略组里将受此条件组合过滤的结果赋值给一个变量,后续再其他策略组中出现时可直接使用,以减少比较次数。
其中,若满足策略内容执行的操作,可以是记录与通过策略相对应的计划ID(具体可以在解析工具里指定),此处存储计划ID的值,做参数传递,各策略通过后的动作是相同的。计划ID是指广告计划的标识。
需要说明的是,“渠道2”中“…”为省略的信息,每个渠道的配置信息的格式和内容相同。
需要说明的是,上述关键字和值在实际实现的配置文件中均是英文字符串的形式设置,以关键字为例,作为一种可实施的方式,例如,“渠道名称”对应的是“name”,“策略标识类型”对应的是“rta_id_type”,“日志所需字段”对应的是“log”,“作用域为本渠道的变量”对应的是“var”,“策略组”对应的是“list”,“分组名称”对应的是“name”,“分流参考值”对应的是“threshold”,“作用域为本策略组的变量”对应的是“var”,“本策略组的策略列表”对应的是“strategy”,“策略名称”对应的是“name”,“策略优先级”对应的是“priority”,“在满足策略内容时是否终止当前策略组的过滤”对应的是“break”,“作用域为本策略及优先级更低的策略的变量”对应的是“var”,“若满足策略内容执行的操作”对应的是“action”,“策略内容”对应的是“filter”,“经过本策略组过滤后执行的操作”对应的是“action”。
S102、对配置文件进行解析,分别将解析出的每个渠道的配置信息增加语义后拼接为符合预设语法的代码块,得到N个渠道的代码块,N个渠道的代码块包括N个渠道的渠道名称和N个渠道的代码块的映射关系。
具体来说,每个渠道的配置信息在配置文件中以关键字和值的形式设置,对配置文件进行解析的过程就是按照关键字获取对应的值的过程,作为一种可实施的方式,对配置文件进行解析,具体可以为:
按照配置文件的结构由外层向内层查找的方式,根据预设关键字从每个渠道的配置信息中查找对应的值,预设关键字为每个渠道的配置信息中的关键字。
例如,以如上所示的配置文件结构为例,由外层向内层一共三层,分别为渠道、策略组和策略三个层级。对于渠道而言,对应的预设关键字可以为渠道名称、策略标识类型、日志所需字段和作用域为本渠道的变量等等。
其中,预设语法可以为C++或C语言等。
S103、将N个渠道的代码块分别填入N个渠道的代码模板,生成N个渠道的源代码。
具体来说,N个渠道的代码模板是预存的,N个渠道的代码模板包括N个渠道的渠道名称和N个渠道的代码模板的对应关系,每个渠道的代码模板包括固定代码和变量。以代码为C++代码为例,可选的,每个渠道的代码模板首先是一个字符串,写在双引号“”里,该字符串的含义是C++代码,包括固定代码和变量,其中固定代码是指源代码中不发生变动的部分,如引入的文件、名称空间或方法的声明等,该字符串可以按C++代码的折行和空行方式书写,方便阅读,在每行末尾追加换行符,使字符串输出时也保持代码的格式。其中变量是指源代码中经常发生调整的部分,被写作模板字符串中的变量,作为一种可实施的方式,变量名称写在两个“$”之间。
作为一种可实施的方式,如下为一个渠道的代码模板的一种示例:
该代码模板中,两个“$”之间的字符串为变量的变量名称,为渠道的代码块填入的位置,其他部分为固定代码,“include”为包含的依赖库,“namespace”为名称空间,class为实现这个渠道的类,“public”为类的公有成员,“private”为类的私有成员。
上述代码模板仅是一种示例,并不构成对代码模板的限定。
可选的,代码模板包括各个渠道的代码模板和初始化所有渠道的代码模板,其中初始化所有渠道的代码模板可以是预存一个,各个渠道的代码模板和渠道对应。每个渠道的代码模板对应两个字符串,分别被用来生成该渠道的.h文件(头文件)和.cc文件(源文件)。初始化所有渠道的代码模板也对应两个字符串,分别被用来生成初始化所有渠道的.h文件(头文件)和.cc文件(源文件)。
作为一种可实施的方式,将N个渠道的代码块分别填入N个渠道的代码模板,生成N个渠道的源代码,具体可以为:
S1031、根据N个渠道的渠道名称和N个渠道的代码块的映射关系以及N个渠道的渠道名称和N个渠道的代码模板的对应关系,确定N个渠道的代码模板和N个渠道的代码块的对应关系。
S1032、将每个渠道的代码块分别填入对应渠道的代码模板中的变量的位置,生成N个渠道的源代码。
可选的,在生成N个渠道的源代码时,还可以指定输出路径以规定源代码生成的位置,渠道名称和是否为头文件的标志,决定了源代码的名称。
本实施例提供的代码生成方法,通过获取配置文件,对配置文件进行解析,分别将解析出的每个渠道的配置信息增加语义后拼接为符合预设语法的代码块,得到N个渠道的代码块,将N个渠道的代码块分别填入N个渠道的代码模板,生成N个渠道的源代码,每个渠道的配置信息包括渠道名称和至少一个策略组。从而,可根据配置文件自动生成每个渠道的源代码,当需要增加或者删减渠道,或者对一个渠道中的策略组进行增加或删减,或者对一个渠道中的策略组中的策略进行修改,只需要修改配置文件,将修改后的配置文件输入到代码生成器中,代码生成器根据修改后的配置文件重新生成每个渠道的源代码,简化了源代码的生成过程,效率高且具有较好的灵活性。
图4为本申请实施例提供的一种代码生成方法的流程图,该代码生成方法可以由代码生成装置执行,该代码生成装置可以通过软件和/或硬件的方式实现。该代码生成装置可以是代码生成器的芯片或电路。如图4所示,本实施例的方法在图3所示方法的基础上,进一步地,S102中分别将解析出的每个渠道的配置信息增加语义后拼接为符合预设语法的代码块,得到N个渠道的代码块,具体可以通过如下步骤实现:
每个渠道的代码块包括第一代码块、第二代码块、第三代码块、第四代码块和第五代码块,通过如下方式分别确定N个渠道的代码块中的每个渠道的代码块:
S1021、根据一个渠道的各个策略组名称构造策略组转化成的方法的声明,得到第一代码块。
具体来说,本实施例中以源代码为C++代码为例进行说明,配置文件里策略组的概念对应着渠道代码里的方法,策略组的名称与方法名一致,配置文件里策略的概念对应着每个方法里一层一层的if条件。根据分流字段确定策略组之后,也就确定了本条流量只会执行该渠道代码中的一个方法。
在Initiator.h文件中,每个渠道对应一个方法,这个方法负责初始化渠道内的分流和分组的映射关系。代码生成装置构造“渠道名称”对应的代码块用来填充各方法的方法体,用到的配置文件中的信息有策略组名称和分流参考值。
S1022、根据一个渠道的变量类型和变量名称构造变量的声明,得到第二代码块。
其中,第一代码块(方法的声明)和第二代码块(变量的声明)可以存储在渠道的.h文件中。
S1023、使用一个渠道的变量类型、变量名称和变量的值拼接对渠道范围内变量的定义,得到第三代码块。
S1024、拼接一个渠道的各个策略组解析出的方法,得到第四代码块。
具体地,拼接一个渠道的各个策略组解析出的方法,可以包括:
S1024a、对每个策略组,根据策略标识类型确定存放策略标识的数据结构内元素的类型,拼接作用域为本策略组的变量。
具体来说,代码生成装置在每一个方法体内首先包含作用域为本策略组的变量,存在不论是哪个渠道或什么策略组都会使用的变量,因为该变量会出现在代码中,且作用域固定,所以本实施例中将该变量未写在承载经常变动信息的配置文件里,而是由代码生成装置直接拼接在代码块。例如,存放策略标识的数据结构的名称(ids”)“就是这种变量,存放策略标识的数据结构(set)用来记录通过的策略,根据策略标识类型来确定存放策略标识的数据结构内元素的类型,然后再拼接作用域为本策略组的变量。
S1024b、解析策略组内各个策略对应的代码,得到方法体。
具体来说,对一个策略来说,一个策略包括策略名称、策略优先级、在满足策略内容时是否终止当前策略组的过滤的指示、作用域为本策略及优先级更低的策略的变量和策略内容,策略的核心是策略内容,解析策略组内各个策略对应的代码,得到方法体,具体可以为:
首先,对策略组内的每个策略,将一个策略的策略内容放入一个if的条件部分,将作用域为本策略及优先级更低的策略的变量放在if的条件部分之前,得到一个策略对应的if代码和变量。
接着,缓存策略组内的每个策略对应的if代码和变量,并按照每个策略的优先级从大到小的顺序对每个策略对应的if代码和变量排序。
然后,在策略组内的所有策略对应的if代码和变量缓存完时,按照缓存的排序顺序拼接每个策略对应的if代码和变量,得到方法体。
最后,根据策略组内的每个策略的在满足过滤条件时是否终止当前策略组的过滤的指示,确定是否在满足if条件的代码末尾添加用于指示终止的代码,例如为“break;”,并根据方法体内所有的if条件限定用于指示终止的代码,例如把本方法里所有的if条件放入“do{}while(0)”的大括号里,限定“break;”跳过的只是优先级更低的策略。
S1024c、解析策略组内经过本策略组过滤后执行的操作对应的代码。
具体来说,经过全部策略后,要返回过滤的结果。代码生成装置在所有“if”条件之后,拼接["策略组"]["经过本策略组过滤后执行的操作"]["是否经过了过滤"]的内容,这是不论过滤结果怎么样都要执行的操作,之后设置条件判断盛放通过的计划ID的ids是否为空,并拼接两种情况下分别执行的代码:["策略组"]["经过本策略组过滤后执行的操作"]["positive"]、["策略组"]["经过本策略组过滤后执行的操作"]["negative"]。
S1024d、根据策略组内日志所需字段的类型拼接写日志的代码,日志所需字段的类型包括第一类型和第二类型,第一类型为指示日志中是否包括预设字段根据能否在数据库中查到用户信息决定,第二类型为指示日志中包括预设字段。
其中,预设字段可以为“has_cpa”。
S1025、拼接绑定方法的代码,得到第五代码块。
具体来说,配置文件中策略组是并列书写的,没有明确说明策略组的关系。要实现的是每条流量只能经过一个策略组,对应到代码里是只会执行一个方法。代码生成装置在第五代码块里把各个策略组名和解析出的方法绑定在一起。当有流量访问时,凭自己的分流字段从initiator.h文件里读出对应的策略组名,也就限定了只会执行某一个方法,即只经过了一个策略组。
S1026、拼接第一代码块、第二代码块、第三代码块、第四代码块和第五代码块,得到一个渠道的代码块。
得到第一代码块、第二代码块、第三代码块、第四代码块和第五代码块之后,拼接这5个代码块,得到一个渠道的代码块。
下面给出一种拼接代码块的示例,如下为一种拼接完的代码块:
“if(”group[“list”][“strategy”][“inclusive”][“expression”].GetString()“){\n”INDENT“ids.insert(”group[“list”][“strategy”][“action”][“id”].Getlnt64()“);\n”if(group[“list”][“strategy”][“break”].GetBool()==true){
INDENT“break;\n”
}
“}\n”
其中,代码块group[“list”][“strategy”][“inclusive”][“expression”].GetString()和代码块group[“list”][“strategy”][“action”][“id”].Getlnt64()是来自配置文件的配置信息,“if(”、“){\n”、INDENT、“ids.insert(”、“);\n”、INDENT、“break;\n”和“}\n”是代码生成装置在解析时依据语法和语意添加的部分,以上两部分均会出现在最终的渠道的代码块里,if(group[“list”][“strategy”][“break”].GetBool()==true){和}不出现在最终的渠道的代码块里,只参与拼接过程中的逻辑判断。
本实施例提供的代码生成方法,通过获取配置文件,对配置文件进行解析,根据解析出的每个渠道的配置信息,先根据一个渠道的各个策略组名称构造策略组转化成的方法的声明,得到第一代码块,再根据一个渠道的变量类型和变量名称构造变量的声明,得到第二代码块,使用一个渠道的变量类型、变量名称和变量的值拼接对渠道范围内变量的定义,得到第三代码块,拼接一个渠道的各个策略组解析出的方法,得到第四代码块,拼接绑定方法的代码,得到第五代码块,最后拼接这五个代码块得到一个渠道的代码块,最终得到N个渠道的代码块,将N个渠道的代码块分别填入N个渠道的代码模板,生成N个渠道的源代码。从而,可根据配置文件自动生成每个渠道的源代码。每个渠道的配置信息包括渠道名称和至少一个策略组,当需要增加或者删减渠道,或者对一个渠道中的策略组进行增加或删减,或者对一个渠道中的策略组中的策略进行修改,只需要修改配置文件,将修改后的配置文件输入到代码生成器中,代码生成器根据修改后的配置文件重新生成每个渠道的源代码,简化了源代码的生成过程,效率高且具有较好的灵活性。
以下为本申请装置实施例,可以用于执行本申请上述方法实施例。对于本申请装置实施例中未披露的细节,可参考本申请上述方法实施例。
图5为本申请实施例提供的一种代码生成装置的结构示意图,如图5所示,本实施例的装置可以包括:获取模块11、处理模块12和生成模块13,其中,获取模块11用于获取配置文件,配置文件包括N个渠道的配置信息,N为大于或等于1的正整数,每个渠道的配置信息在配置文件中以关键字和值的形式设置,每个渠道的配置信息包括渠道名称和至少一个策略组,每个策略组包括策略组名称、分流参考值、作用域为本策略组的变量、本策略组的策略列表和经过本策略组过滤后执行的操作,本策略组的策略列表中的一个策略包括策略名称、策略优先级、在满足策略内容时是否终止当前策略组的过滤的指示、作用域为本策略及优先级更低的策略的变量和策略内容。
处理模块12用于对配置文件进行解析,分别将解析出的每个渠道的配置信息增加语义后拼接为符合预设语法的代码块,得到N个渠道的代码块,N个渠道的代码块包括N个渠道的渠道名称和N个渠道的代码块的映射关系。
生成模块13用于将N个渠道的代码块分别填入N个渠道的代码模板,生成N个渠道的源代码。
可选的,处理模块12用于按照配置文件的结构由外层向内层查找的方式,根据预设关键字从每个渠道的配置信息中查找对应的值,预设关键字为每个渠道的配置信息中的关键字。
可选的,每个渠道的配置信息还包括策略标识类型、日志所需字段和作用域为本渠道的变量,作用域为本渠道的变量包括变量类型、变量名称和变量的值,处理模块12用于:通过如下方式分别确定N个渠道的代码块中的每个渠道的代码块:
根据一个渠道的各个策略组名称构造策略组转化成的方法的声明,得到第一代码块;
根据一个渠道的变量类型和变量名称构造变量的声明,得到第二代码块;
使用一个渠道的变量类型、变量名称和变量的值拼接对渠道范围内变量的定义,得到第三代码块;
拼接一个渠道的各个策略组解析出的方法,得到第四代码块;
拼接绑定方法的代码,得到第五代码块;
拼接第一代码块、第二代码块、第三代码块、第四代码块和第五代码块,得到一个渠道的代码块。
可选的,处理模块12用于:对每个策略组,根据策略标识类型确定存放策略标识的数据结构内元素的类型,拼接作用域为本策略组的变量;
解析策略组内各个策略对应的代码,得到方法体;
解析策略组内经过本策略组过滤后执行的操作对应的代码;
根据策略组内日志所需字段的类型拼接写日志的代码,日志所需字段的类型包括第一类型和第二类型,第一类型为指示日志中是否包括预设字段根据能否在数据库中查到用户信息决定,第二类型为指示日志中包括预设字段。
可选的,处理模块12用于:对策略组内的每个策略,将一个策略的策略内容放入一个if的条件部分,将作用域为本策略及优先级更低的策略的变量放在if的条件部分之前,得到一个策略对应的if代码和变量;
缓存策略组内的每个策略对应的if代码和变量,并按照每个策略的优先级从大到小的顺序对每个策略对应的if代码和变量排序;
在策略组内的所有策略对应的if代码和变量缓存完时,按照缓存的排序顺序拼接每个策略对应的if代码和变量,得到方法体;
根据策略组内的每个策略的在满足过滤条件时是否终止当前策略组的过滤的指示,确定是否在满足if条件的代码末尾添加用于指示终止的代码,并根据方法体内所有的if条件限定用于指示终止的代码。
可选的,N个渠道的代码模板包括N个渠道的渠道名称和N个渠道的代码模板的对应关系,每个渠道的代码模板包括固定代码和变量,生成模块13用于:
根据N个渠道的渠道名称和N个渠道的代码块的映射关系以及N个渠道的渠道名称和N个渠道的代码模板的对应关系,确定N个渠道的代码模板和N个渠道的代码块的对应关系;
将每个渠道的代码块分别填入对应渠道的代码模板中的变量的位置,生成N个渠道的源代码。
本申请实施例提供的装置,可执行上述方法实施例,其具体实现原理和技术效果,可参见上述方法实施例,本实施例此处不再赘述。
需要说明的是,应理解以上装置的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理元件调用软件的形式实现,部分模块通过硬件的形式实现。例如,处理模块可以为单独设立的处理元件,也可以集成在上述装置的某一个芯片中实现,此外,也可以以程序代码的形式存储于上述装置的存储器中,由上述装置的某一个处理元件调用并执行以上处理模块的功能。其它模块的实现与之类似。此外这些模块全部或部分可以集成在一起,也可以独立实现。这里的处理元件可以是一种集成电路,具有信号的处理能力。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。
例如,以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(application specific integrated circuit,ASIC),或,一个或多个微处理器(digital signal processor,DSP),或,一个或者多个现场可编程门阵列(field programmable gate array,FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(centralprocessing unit,CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,SOC)的形式实现。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘solid state disk(SSD))等。
图6为本申请实施例提供的一种代码生成器的结构示意图,如图6所示,本实施例的代码生成器可以包括处理器21和存储器22,
其中,存储器22用于存储处理器21的可执行指令。
处理器21配置为经由执行可执行指令来执行上述方法实施例中的代码生成方法。
可选地,存储器22既可以是独立的,也可以跟处理器21集成在一起。
当存储器22是独立于处理器21之外的器件时,本实施例的代码生成器还可以包括:
总线23,用于连接存储器22和处理器21。
可选地,本实施例的代码生成器还可以包括:通信接口24,该通信接口24可以通过总线23与处理器21连接。
本申请还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当其在计算机上运行时,使得计算机执行如上述实施例的代码生成方法。
本申请实施例还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现如上实施例中的代码生成方法。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (10)
1.一种代码生成方法,其特征在于,包括:
获取配置文件,所述配置文件包括N个渠道的配置信息,所述N为大于或等于1的正整数,每个渠道的配置信息在所述配置文件中以关键字和值的形式设置,每个渠道的配置信息包括渠道名称和至少一个策略组,每个策略组包括策略组名称、分流参考值、作用域为本策略组的变量、本策略组的策略列表和经过本策略组过滤后执行的操作,所述本策略组的策略列表中的一个策略包括策略名称、策略优先级、在满足策略内容时是否终止当前策略组的过滤的指示、作用域为本策略及优先级更低的策略的变量和所述策略内容;
对所述配置文件进行解析,分别将解析出的每个渠道的配置信息增加语义后拼接为符合预设语法的代码块,得到所述N个渠道的代码块,所述N个渠道的代码块包括所述N个渠道的渠道名称和所述N个渠道的代码块的映射关系;
将所述N个渠道的代码块分别填入所述N个渠道的代码模板,生成所述N个渠道的源代码。
2.根据权利要求1所述的方法,其特征在于,所述对所述配置文件进行解析,包括:
按照所述配置文件的结构由外层向内层查找的方式,根据预设关键字从所述每个渠道的配置信息中查找对应的值,所述预设关键字为所述每个渠道的配置信息中的关键字。
3.根据权利要求2所述的方法,其特征在于,所述每个渠道的配置信息还包括策略标识类型、日志所需字段和作用域为本渠道的变量,所述作用域为本渠道的变量包括变量类型、变量名称和变量的值,所述分别将解析出的每个渠道的配置信息增加语义后拼接为符合预设语法的代码块,得到所述N个渠道的代码块,包括:
通过如下方式分别确定所述N个渠道的代码块中的每个渠道的代码块:
根据一个渠道的各个策略组名称构造策略组转化成的方法的声明,得到第一代码块;
根据一个渠道的变量类型和变量名称构造变量的声明,得到第二代码块;
使用一个渠道的变量类型、变量名称和变量的值拼接对渠道范围内变量的定义,得到第三代码块;
拼接一个渠道的各个策略组解析出的方法,得到第四代码块;
拼接绑定方法的代码,得到第五代码块;
拼接所述第一代码块、所述第二代码块、所述第三代码块、所述第四代码块和所述第五代码块,得到一个渠道的代码块。
4.根据权利要求3所述的方法,其特征在于,所述拼接一个渠道的各个策略组解析出的方法,包括:
对每个策略组,根据所述策略标识类型确定存放策略标识的数据结构内元素的类型,拼接所述作用域为本策略组的变量;
解析所述策略组内各个策略对应的代码,得到方法体;
解析所述策略组内所述经过本策略组过滤后执行的操作对应的代码;
根据所述策略组内所述日志所需字段的类型拼接写日志的代码,所述日志所需字段的类型包括第一类型和第二类型,所述第一类型为指示日志中是否包括预设字段根据能否在数据库中查到用户信息决定,所述第二类型为指示日志中包括所述预设字段。
5.根据权利要求4所述的方法,其特征在于,所述解析所述策略组内各个策略对应的代码,得到方法体,包括:
对所述策略组内的每个策略,将一个策略的所述策略内容放入一个if的条件部分,将所述作用域为本策略及优先级更低的策略的变量放在if的条件部分之前,得到一个策略对应的if代码和变量;
缓存所述策略组内的每个策略对应的if代码和变量,并按照每个策略的优先级从大到小的顺序对每个策略对应的if代码和变量排序;
在所述策略组内的所有策略对应的if代码和变量缓存完时,按照缓存的排序顺序拼接每个策略对应的if代码和变量,得到所述方法体;
根据所述策略组内的每个策略的在满足所述过滤条件时是否终止当前策略组的过滤的指示,确定是否在满足if条件的代码末尾添加用于指示终止的代码,并根据所述方法体内所有的if条件限定所述用于指示终止的代码。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述N个渠道的代码模板包括所述N个渠道的渠道名称和所述N个渠道的代码模板的对应关系,每个渠道的代码模板包括固定代码和变量,所述将所述N个渠道的代码块分别填入所述N个渠道的代码模板,生成所述N个渠道的源代码,包括:
根据所述N个渠道的渠道名称和所述N个渠道的代码块的映射关系以及所述N个渠道的渠道名称和所述N个渠道的代码模板的对应关系,确定所述N个渠道的代码模板和所述N个渠道的代码块的对应关系;
将每个渠道的代码块分别填入对应渠道的代码模板中的变量的位置,生成所述N个渠道的源代码。
7.一种代码生成装置,其特征在于,包括:
获取模块,用于获取配置文件,所述配置文件包括N个渠道的配置信息,所述N为大于或等于1的正整数,每个渠道的配置信息在所述配置文件中以关键字和值的形式设置,每个渠道的配置信息包括渠道名称和至少一个策略组,每个策略组包括策略组名称、分流参考值、作用域为本策略组的变量、本策略组的策略列表和经过本策略组过滤后执行的操作,所述本策略组的策略列表中的一个策略包括策略名称、策略优先级、在满足策略内容时是否终止当前策略组的过滤的指示、作用域为本策略及优先级更低的策略的变量和所述策略内容;
处理模块,用于对所述配置文件进行解析,分别将解析出的每个渠道的配置信息增加语义后拼接为符合预设语法的代码块,得到所述N个渠道的代码块,所述N个渠道的代码块包括所述N个渠道的渠道名称和所述N个渠道的代码块的映射关系;
生成模块,用于将所述N个渠道的代码块分别填入所述N个渠道的代码模板,生成所述N个渠道的源代码。
8.根据权利要求7所述的装置,其特征在于,所述对所述配置文件进行解析,包括:
按照所述配置文件的结构由外层向内层查找的方式,根据预设关键字从所述每个渠道的配置信息中查找对应的值,所述预设关键字为所述每个渠道的配置信息中的关键字。
9.一种代码生成器,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1-6任一项所述的代码生成方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-6任一项所述的代码生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110448115.7A CN113157262A (zh) | 2021-04-25 | 2021-04-25 | 代码生成方法、装置、代码生成器以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110448115.7A CN113157262A (zh) | 2021-04-25 | 2021-04-25 | 代码生成方法、装置、代码生成器以及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113157262A true CN113157262A (zh) | 2021-07-23 |
Family
ID=76870204
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110448115.7A Pending CN113157262A (zh) | 2021-04-25 | 2021-04-25 | 代码生成方法、装置、代码生成器以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113157262A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113986245A (zh) * | 2021-10-28 | 2022-01-28 | 平安银行股份有限公司 | 基于halo平台的目标代码生成方法、装置、设备及介质 |
CN114840295A (zh) * | 2022-05-10 | 2022-08-02 | 网易(杭州)网络有限公司 | 一种信息展示方法、展示装置、设备和介质 |
CN113986245B (zh) * | 2021-10-28 | 2024-11-05 | 平安银行股份有限公司 | 基于halo平台的目标代码生成方法、装置、设备及介质 |
-
2021
- 2021-04-25 CN CN202110448115.7A patent/CN113157262A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113986245A (zh) * | 2021-10-28 | 2022-01-28 | 平安银行股份有限公司 | 基于halo平台的目标代码生成方法、装置、设备及介质 |
CN113986245B (zh) * | 2021-10-28 | 2024-11-05 | 平安银行股份有限公司 | 基于halo平台的目标代码生成方法、装置、设备及介质 |
CN114840295A (zh) * | 2022-05-10 | 2022-08-02 | 网易(杭州)网络有限公司 | 一种信息展示方法、展示装置、设备和介质 |
CN114840295B (zh) * | 2022-05-10 | 2023-09-15 | 网易(杭州)网络有限公司 | 一种信息展示方法、展示装置、设备和介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10942708B2 (en) | Generating web API specification from online documentation | |
US10169471B2 (en) | Generating and executing query language statements from natural language | |
US10102246B2 (en) | Natural language consumer segmentation | |
US11151323B2 (en) | Embedding natural language context in structured documents using document anatomy | |
US11019012B2 (en) | File sending in instant messaging application | |
CN112434811A (zh) | 知识图谱构建方法及装置、计算设备、存储介质 | |
CN106844792B (zh) | 一种社交关系的原生信息指定受众广告实现方法及系统 | |
US11487801B2 (en) | Dynamic data visualization from factual statements in text | |
US9471551B1 (en) | Promoting content | |
CN113238740A (zh) | 代码生成方法、代码生成装置、存储介质及电子设备 | |
CN112040013A (zh) | 用于页面路由的方法、计算设备和计算机存储介质 | |
CN113157262A (zh) | 代码生成方法、装置、代码生成器以及存储介质 | |
CN111338716A (zh) | 基于规则引擎的数据处理方法、装置及终端设备 | |
US10061751B1 (en) | Promoting content | |
US20230418874A1 (en) | Styling a query response based on a subject identified in the query | |
US11157477B2 (en) | Handling queries in document systems using segment differential based document text-index modelling | |
CN116127154A (zh) | 知识标签推荐方法、装置、电子设备及存储介质 | |
US8881006B2 (en) | Managing digital signatures | |
US20190361932A1 (en) | Aggregated content editing services (aces), and related systems, methods, and apparatus | |
CN109254774A (zh) | 软件开发系统中代码的管理方法和装置 | |
WO2021037045A1 (zh) | 知识图谱构建方法及装置、计算设备、存储介质 | |
US20210081361A1 (en) | Identity represented assets in a content management system | |
US10878005B2 (en) | Context aware document advising | |
CN113761436A (zh) | 一种数据统计方法和装置 | |
CN111736807A (zh) | 租户功能定制方法、装置及基于租户的办公系统 |
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 |