CN116880826B - 一种可视化代码生成方法 - Google Patents
一种可视化代码生成方法 Download PDFInfo
- Publication number
- CN116880826B CN116880826B CN202311146166.XA CN202311146166A CN116880826B CN 116880826 B CN116880826 B CN 116880826B CN 202311146166 A CN202311146166 A CN 202311146166A CN 116880826 B CN116880826 B CN 116880826B
- Authority
- CN
- China
- Prior art keywords
- template
- code
- function
- lib
- configuration
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 29
- 238000004458 analytical method Methods 0.000 claims abstract description 6
- 238000004806 packaging method and process Methods 0.000 claims abstract description 4
- 230000006870 function Effects 0.000 claims description 88
- 230000008676 import Effects 0.000 claims description 10
- 238000009877 rendering Methods 0.000 claims description 9
- 230000001502 supplementing effect Effects 0.000 claims description 5
- 238000012545 processing Methods 0.000 claims description 4
- 230000000007 visual effect Effects 0.000 claims description 3
- 238000000605 extraction Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 230000001419 dependent effect Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 4
- 238000012795 verification Methods 0.000 description 4
- 238000002372 labelling Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
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/35—Creation or generation of source code model driven
- G06F8/355—Round-trip engineering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及代码生成技术领域,涉及一种基于函数标记的代码模板及可视化代码生成方法,其包括:将模板函数及其对应的解析逻辑、替换逻辑进行封装,形成独立依赖包template‑lib;通过依赖包template‑lib提供的模板函数对源代码的动态部分进行替换,得到基于函数标记的代码模板,用于生成代码。借此,通过定义与源代码语法一致的模板函数,将模板函数作为介质对源代码进行替换、标记,解决了源码与代码模板语法不一致的问题,降低了使用者的使用门槛,方便使用。
Description
技术领域
本发明涉及代码生成技术领域,特别涉及一种可视化代码生成方法。
背景技术
在代码编程中,经常会遇到需要生成大量重复代码的情况,手动编写这些重复的代码不仅费时费力,还容易出错。为了解决这个问题,可以利用代码模板来生成代码,提高工作效率并减少错误。
现有的代码模板生成方式是将源码通过模板语法进行替换,将模板语法作为一种代码标记,通过不同的标记形成代码模板,在后续流程中,识别对应标记并进行替换完成最终代码的渲染。
上述方案中,由于源码的语法与模板语法不一致,这就要求使用者付出额外的学习成本,同时熟悉精通两种语法,提高了使用门槛,不便于模板开发。
需要说明的是,公开于该背景技术部分的信息仅仅旨在增加对本发明的总体背景的理解,而不应当被视为承认或以任何形式暗示该信息构成已为本领域一般技术人员所公知的现有技术。
发明内容
为解决上述背景技术中的难题, 本发明提供一种基于函数标记的代码模板,其包括以下步骤:
定义javascript环境下的原生函数为模板函数,所述模板函数与源代码语法一致;
将模板函数及其对应的解析逻辑、替换逻辑进行封装,形成独立依赖包template-lib;
通过依赖包template-lib提供的模板函数对源代码的动态部分进行替换,得到基于函数标记的代码模板,用于生成代码。
进一步地,所述模板函数的返回值为对应替换形式的返回值。
进一步地,所述依赖包template-lib中包含多个模板函数。
进一步地,所述模板函数的参数为单一的对象结构。
本发明还提供一种可视化代码生成方法,其采用上述任意一项所述的代码模板进行生成,具体包含以下步骤:
将所述代码模板作为参数传入代码生成工具并进行信息提取,输出结果集;
对结果集进行二次处理,根据不同的type值补充不同的配置界面所需数据,产出配置界面元数据并渲染配置界面;
根据需求在配置界面填充代码所需配置数据;
将配置数据和代码模板作为参数传入代码生成工具,转化为ast语法树;
将所述ast语法树渲染为代码。
进一步地,通过调用template-lib中的resolve方法对代码模板进行信息提取。
进一步地,对代码模板进行信息提取的步骤中包含如下子步骤:
通过语法解析器将代码模板字符串转为抽象语法树;
在抽象语法树中搜索来源为template-lib的导入节点,记录其导入的模板函数名称和其作用域;
搜索符合导入作用域下的函数调用节点,记录其调用的函数名和参数,存入结果集中;
语法树搜索结束后输出结果集。
进一步地,根据type值补充不同的配置界面所需数据中,补充的数据取决于代码生成需要的额外数据及配置界面要渲染的配置控件。
进一步地,代码生成工具通过调用template-lib中的compile方法对配置数据和代码模板进行渲染。
基于上述,与现有技术相比,本发明提供的基于函数标记的代码模板,通过定义与源代码语法一致的模板函数,将模板函数作为介质对源代码进行替换、标记,解决了源码与代码模板语法不一致的问题,降低了使用者的使用门槛,方便使用。
本发明的其它特征和有益效果将在随后的说明书中阐述,并且,部分地特征和有益效果可以通过实施本发明而了解。本发明的目的和其他有益效果可通过在说明书等内容中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单的介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图;在下面描述中附图所述位置关系,若无特别指明,皆是以图示中组件绘示的方向为基准。
图1是本发明实施例一提供的基于函数标记的代码模板的生成方法流程图;
图2是本发明实施例二提供的可视化代码生成方法的步骤流程图;
图3是本发明实施例三提供的对代码模板进行信息提取的具体步骤流程图;
图4是本发明提供的依赖包的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例;下面所描述的本发明不同实施方式中所设计的技术特征只要彼此之间未构成冲突就可以相互结合;基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要说明的是,本发明所使用的所有术语(包括技术术语和科学术语)具有与本发明所属领域的普通技术人员通常所理解的含义相同的含义,不能理解为对本发明的限制;应进一步理解,本发明所使用的术语应被理解为具有与这些术语在本说明书的上下文和相关领域中的含义一致的含义,并且不应以理想化或过于正式的意义来理解,除本发明中明确如此定义之外。
实施例一
在javascript环境下,其原生函数具有特殊性,能在代码的任意位置进行嵌入,例如:作为变量值、在其他函数作为参数、执行体中调用或在jsx代码中作为组件等。在本案中定义为“模板函数”。利用这一特殊性,本发明提供一种基于函数标记的代码模板的生成方法,如图1所示,包含以下步骤:
定义javascript环境下的原生函数为模板函数,所述模板函数与源代码语法一致;
将模板函数及其对应的解析逻辑、替换逻辑进行封装,形成独立依赖包template-lib;
通过依赖包template-lib提供的模板函数对源代码的动态部分进行替换,得到基于函数标记的代码模板,用于生成代码。
需要说明的是,本案中描述的“template-lib”仅作为依赖包的名称,不具有特殊含义,亦可采用其他名称进行定义。
依赖包template-lib在开发模板过程中可以直接引入模板函数,直接应用现有的IDE支持,提供代码提示。
同时,在javascript不同范围的作用域中,具有同名函数会被覆盖这一语言特性,且模板函数在定义上与业务代码中的其他函数定义没有区分, 导致如果模板中出现与模板函数同名的局部函数定义和调用单靠检测函数节点,将无法区分哪个是模板函数。因此,通过独立依赖包的形式,给予作用域绑定,在后续ast节点搜索中通过记录不同的函数作用域可以区分出是否为模板函数。
依赖包template-lib中包含多个模板函数,每一个模板函数标记了一种代码生成类型,即为用函数名区分代码生成类型,例如FormSlot 用于生成如下的代码片段:
<Form><Input /><Form>serviceSlot,用于生成如下的代码片段:
const userService = useService(UserService)。
每个模板函数包含一个对应的解析逻辑和替换逻辑,解析逻辑用于对模板函数名、参数、返回值做转换形成json格式数据,替换逻辑用于对函数ast节点做替换。
模板函数的参数为单一的对象结构{ key:“”,name:“”}。在同个模板开发过程中,模板函数的调用次数不限于一次,每次调用皆为一个独立场景,因此设定参数固定属性key为字符串,name为中文说明字符串,用来区分代码执行场景,例如:
serviceSlot({
key:“edit”,
name:“编辑表单”
})。
需要说明的是,如果只考虑标记能力,模板函数都可以为空实现,但考虑到方便模板开发者,让模板开发者能通过javascript对应的语言环境验证固定代码片段的正确性,要求标记函数的返回值需不影响源码的执行。
而为了不引起源码的执行错误,假设生成的代码返回一个字符串,模板函数的返回值必须也是字符串,即模板函数返回值为对应替换形式的返回值。
实施例二
本发明还提供一种采用上述基于函数标记的代码模板进行代码生成的方法,如图2所示,包含以下步骤:
将所述代码模板作为参数传入代码生成工具并进行信息提取,输出结果集;
对结果集进行二次处理,根据不同的type值补充不同的配置界面所需数据,产出配置界面元数据并渲染配置界面;
根据需求在配置界面填充代码所需配置数据;
将配置数据和代码模板作为参数传入代码生成工具,转化为ast语法树;
将所述ast语法树渲染为代码。
在具体实施时,代码生成工具中持有多个不同类型的代码模板。用户根据需要选择所需的代码模板,通过调用template-lib中的resolve方法对代码模板进行信息提取。
将提取后的函数标记信息进行二次处理,根据不同的type值,补充不同的配置界面所需数据,产出配置界面元数据。填充的数据取决于代码生成需要的额外数据及配置界面要渲染的配置控件。
代码生成工具根据配置界面元数据渲染配置界面,供给用户,用户根据配置界面,填入生成代码所需要的配置数据。
将配置数据及代码模板作为参数传入代码生成工具,代码生成工具调用template-lib中的compile方法,结合配置数据和代码模板,转化为ast语法树。
代码生成工具遍历语法树中的import节点,识别是否包含template-lib依赖包的引入,并记录引入的模板函数及其作用域。其次,遍历语法树中的函数调用节点,通过与import节点记录的作用域做比对识别,判断是否为模板函数。
根据不同的模板函数调用不同的生成逻辑,生成JSX语法子树,最后,对其中的import数组做合并,将重复import的代码统一为一份,最终渲染为代码,代码经过格式化后,输出为最终用户所需的代码。
需要说明的是,由于模板函数与源代码语法一致,在开发过程中可以在源代码语法环境或源代码语法的IDE提供的代码验证环境中,直接验证代码模板中固定部分的语法正确性。
实施例三
本实施例三在实施例二的基础上对代码模板进行信息提取的过程进行了细化,如图3所示,具体步骤为:
通过语法解析器将源代码字符串转为抽象语法树;
在抽象语法树中搜索来源为template-lib的导入节点,记录其导入的模板函数名称和其作用域;
搜索符合导入作用域下的函数调用节点,记录其调用的函数名和参数,存入结果集中;
语法树搜索结束后输出结果集。
在本实施例中,通过调用template-lib中的resolve方法对代码模板进行信息提取。代码生成工具遍历语法树中的import节点,识别是否包含template-lib依赖的引入,并记录引入的模板函数及其作用域。其次,遍历语法树中的函数调用节点,通过import节点记录的作用域做比对识别是否为模板函数并对模板函数进行分析。
查找函数对应的首个参数节点校验参数是否为对象类型、参数对象中是否包含key和name属性和属性值是否为可反序列化的值,一次判断入参是否正确。若校验不通过记录错误信息并跳过,校验通过便对参数做反序列化记录其值和对应的函数名称到结果集中,最终遍历完成后输出结果集。
在本案其他一些实施例中,基于函数标记的代码模板的生成方法可以与代码生成方法整合,同步进行实施。
综上所述,与现有技术相比,本发明提供的基于函数标记的代码模板,通过定义与源代码语法一致的模板函数,将模板函数作为介质对源代码进行替换、标记,解决了源码与代码模板语法不一致的问题,降低了使用者的使用门槛,同时在开发过程中可以在源代码语法环境或源代码语法的IDE提供的代码验证环境中,直接验证代码模板中固定部分的语法正确性,方便使用。
另外,本领域技术人员应当理解,尽管现有技术中存在许多问题,但是,本发明的每个实施例或技术方案可以仅在一个或几个方面进行改进,而不必同时解决现有技术中或者背景技术中列出的全部技术问题。本领域技术人员应当理解,对于一个权利要求中没有提到的内容不应当作为对于该权利要求的限制。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (6)
1.一种可视化代码生成方法,其特征在于:包含以下步骤:
定义javascript环境下的原生函数为模板函数,所述模板函数与源代码语法一致;
将模板函数及其对应的解析逻辑、替换逻辑进行封装,形成独立依赖包template-lib;
通过独立依赖包template-lib提供的模板函数对源代码的动态部分进行替换,得到基于函数标记的代码模板;
将所述代码模板作为参数传入代码生成工具并通过独立依赖包template-lib中的resolve方法对代码模板进行信息提取;
通过语法解析器将代码模板字符串转为抽象语法树;
在抽象语法树中搜索来源为独立依赖包template-lib的导入节点,记录其导入的模板函数名称和其作用域;
搜索符合导入作用域下的函数调用节点,记录其调用的函数名和参数,存入结果集中,语法树搜索结束后输出结果集;
对结果集进行二次处理,根据不同的type值补充不同的配置界面所需数据,产出配置界面元数据并渲染配置界面;
根据需求在配置界面填充代码所需配置数据;
将配置数据和代码模板作为参数传入代码生成工具,转化为抽象语法树;
将所述抽象语法树渲染为代码。
2.根据权利要求1所述的可视化代码生成方法,其特征在于:所述模板函数的返回值为对应替换形式的返回值。
3.根据权利要求1所述的可视化代码生成方法,其特征在于:所述独立依赖包template-lib中包含多个模板函数。
4.根据权利要求1所述的可视化代码生成方法,其特征在于:所述模板函数的参数为单一的对象结构。
5.根据权利要求1所述的可视化代码生成方法,其特征在于:根据type值补充不同的配置界面所需数据中,补充的数据取决于代码生成需要的额外数据及配置界面要渲染的配置控件。
6.根据权利要求1所述的可视化代码生成方法,其特征在于:通过调用独立依赖包template-lib中的compile方法对配置数据和代码模板进行渲染。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311146166.XA CN116880826B (zh) | 2023-09-07 | 2023-09-07 | 一种可视化代码生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311146166.XA CN116880826B (zh) | 2023-09-07 | 2023-09-07 | 一种可视化代码生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116880826A CN116880826A (zh) | 2023-10-13 |
CN116880826B true CN116880826B (zh) | 2023-12-08 |
Family
ID=88255425
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311146166.XA Active CN116880826B (zh) | 2023-09-07 | 2023-09-07 | 一种可视化代码生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116880826B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101408892A (zh) * | 2008-11-21 | 2009-04-15 | 上海全景数字技术有限公司 | 一种网页生成方法和装置 |
CN105824787A (zh) * | 2016-03-15 | 2016-08-03 | 江苏中威科技软件系统有限公司 | 一种html模板动态配置的控制方法及系统 |
CN110007917A (zh) * | 2019-03-08 | 2019-07-12 | 国电南瑞科技股份有限公司 | 一种基于浏览器的可视化页面生成和浏览方法 |
CN110297999A (zh) * | 2019-05-09 | 2019-10-01 | 京东方科技集团股份有限公司 | 一种网页模板生成方法及装置、网页加载方法及前端服务器和网站服务器 |
CN112306479A (zh) * | 2020-10-10 | 2021-02-02 | 苏州浪潮智能科技有限公司 | 一种基于抽象语法的代码可视化分析方法及装置 |
CN113126990A (zh) * | 2021-04-22 | 2021-07-16 | 北京京东振世信息技术有限公司 | 一种页面开发方法、装置、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8091071B2 (en) * | 2006-08-21 | 2012-01-03 | Sap, Ag | Method and system for template-based code generation |
-
2023
- 2023-09-07 CN CN202311146166.XA patent/CN116880826B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101408892A (zh) * | 2008-11-21 | 2009-04-15 | 上海全景数字技术有限公司 | 一种网页生成方法和装置 |
CN105824787A (zh) * | 2016-03-15 | 2016-08-03 | 江苏中威科技软件系统有限公司 | 一种html模板动态配置的控制方法及系统 |
CN110007917A (zh) * | 2019-03-08 | 2019-07-12 | 国电南瑞科技股份有限公司 | 一种基于浏览器的可视化页面生成和浏览方法 |
CN110297999A (zh) * | 2019-05-09 | 2019-10-01 | 京东方科技集团股份有限公司 | 一种网页模板生成方法及装置、网页加载方法及前端服务器和网站服务器 |
CN112306479A (zh) * | 2020-10-10 | 2021-02-02 | 苏州浪潮智能科技有限公司 | 一种基于抽象语法的代码可视化分析方法及装置 |
CN113126990A (zh) * | 2021-04-22 | 2021-07-16 | 北京京东振世信息技术有限公司 | 一种页面开发方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116880826A (zh) | 2023-10-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106919434B (zh) | 一种代码生成方法及装置 | |
CN110196719B (zh) | 一种基于自然语言处理的业务规则生成方法与系统 | |
US9146712B2 (en) | Extensible code auto-fix framework based on XML query languages | |
CN110059176B (zh) | 一种基于规则的通用文本信息抽取和信息生成方法 | |
JPS6375835A (ja) | 目的コ−ド、プログラム・リスト及び設計文書を生成する装置 | |
US20070006128A1 (en) | Method for evaluating dynamic expressions | |
US20090249307A1 (en) | Program analysis apparatus, program analysis method, and program storage medium | |
CN110209387B (zh) | 一种顶层hdl文件生成方法和装置、计算机可读存储介质 | |
CN111913739B (zh) | 一种服务接口原语定义方法和系统 | |
CN111159995A (zh) | 一种模板化生成word文档的方法 | |
CN109325217B (zh) | 一种文件转换方法、系统、装置及计算机可读存储介质 | |
CN101201750B (zh) | 利用语法词法分析工具为编解码提供数据的方法 | |
JP5747698B2 (ja) | 要件管理支援装置 | |
CN103049504A (zh) | 基于源代码查询的半自动插桩方法 | |
CN116880826B (zh) | 一种可视化代码生成方法 | |
US20090064092A1 (en) | Visual programming language optimization | |
US20070169054A1 (en) | Process of automatically translating a high level programming language into an extended activity diagram | |
CN109254774A (zh) | 软件开发系统中代码的管理方法和装置 | |
CN110554860B (zh) | 一种软件项目自然语言编程接口nli的构造方法及代码生成方法 | |
CN107577476A (zh) | 一种基于模块划分的安卓系统源码差异性分析方法、服务器及介质 | |
JP2009080681A (ja) | プログラム構造解析方法及び装置 | |
JP4387324B2 (ja) | プロパティ変換装置 | |
CN111708572B (zh) | 一种基于Clang程序结构的控制流程图自动生成方法 | |
CN114610320B (zh) | 一种基于llvm的变量类型信息修复与比较方法及系统 | |
JPH1185536A (ja) | 原始プログラムのエラー自動修正装置及び方法 |
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 |