CN113778899A - 一种在Lua代码编译前检查语法错误和性能的方法 - Google Patents
一种在Lua代码编译前检查语法错误和性能的方法 Download PDFInfo
- Publication number
- CN113778899A CN113778899A CN202111144473.5A CN202111144473A CN113778899A CN 113778899 A CN113778899 A CN 113778899A CN 202111144473 A CN202111144473 A CN 202111144473A CN 113778899 A CN113778899 A CN 113778899A
- Authority
- CN
- China
- Prior art keywords
- lua
- checking
- source program
- grammar
- code
- 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
- 238000000034 method Methods 0.000 title claims abstract description 19
- 238000004458 analytical method Methods 0.000 claims abstract description 11
- 238000012216 screening Methods 0.000 claims abstract description 6
- 230000015572 biosynthetic process Effects 0.000 claims abstract description 4
- 238000001914 filtration Methods 0.000 claims 1
- 230000014759 maintenance of location Effects 0.000 abstract description 3
- 238000007689 inspection Methods 0.000 abstract 1
- 230000007547 defect Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 230000018109 developmental process Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000005206 flow analysis Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种在Lua代码编译前检查语法错误和性能的方法,包括以下步骤:逐字符扫描Lua源程序,根据构词规则识别到Lua源程序中的关键字,实现关键字检查;检查语法短语是否存在语法错误,由此实现语法检查;获取报告筛选条件,对Lua源程序进行语义分析,检查Lua源程序是否存在逻辑和性能问题;生成检查报告。本发明提供一种在Lua代码编译前检查语法错误和性能的方法,不需要运行Lua源代码,即可对Lua源代码进行检查并生成报告,从而更好的支持移动游戏中使用Lua满足热更新的需求,从而提高游戏的留存率。本发明解决了Lua没有好的IDE直接支持,Lua源代码中存在的错误排查效率低的问题。
Description
技术领域
本发明属于计算机软件技术领域,具体涉及一种在Lua代码编译前检查语法错误和性能的方法。
背景技术
传统的手机网络游戏开发中,为减少游戏更新造成用户重新下载安装包所造成的玩家流失,游戏软件发布后都需要支持热更新。Lua语言就是开发者为支持热更新而选择的一种脚本开发语言。
但是,Lua语言没有静态类型检查,大项目很难做重构,也没有IDE直接支持,无法做断点调试。因此,Lua代码冗余和一些拼写错误,类型错误等问题,只有在Lua代码运行时才能发现,然后靠肉眼排查,极大的降低了网络游戏开发的效率。
发明内容
针对现有技术存在的缺陷,本发明提供一种在Lua代码编译前检查语法错误和性能的方法,可有效解决上述问题。
本发明采用的技术方案如下:
本发明提供一种在Lua代码编译前检查语法错误和性能的方法,包括以下步骤:
步骤1,按从左到右方向,逐字符扫描Lua源程序,根据构词规则识别到Lua源程序中的关键字,并检查识别到的关键字是否存在错误,由此实现关键字检查;
步骤2,将步骤1识别到的各个关键字,按扫描顺序,组合成多个语法短语,并检查语法短语是否存在语法错误,由此实现语法检查;
步骤3,获取报告筛选条件,对Lua源程序进行语义分析,检查Lua源程序是否存在逻辑和性能问题;
步骤4,将检查到的关键字问题、语法问题以及逻辑和性能问题,生成检查报告。
优选的,所述报告筛选条件,包括以下选项中的一种或多种:
试图访问一个全局变量的未定义域;更改一个未定义的全局变量;访问未被初始化的局部变量;更改了一个局部变量但从未被访问;设置了一个局部变量但从未访问;未被使用的一个分配给局部变量的值;重定义了一个参数;覆盖了一个局部变量;覆盖了一个循环变量;重定义了一个局部变量;未被使用的循环变量。
优选的,对于Lua源程序,首先解析Lua源程序的代码文件,并转换成抽象语法树;
然后,基于所述抽象语法树,进行关键字检查,语法检查,以及逻辑和性能检查。
本发明提供的一种在Lua代码编译前检查语法错误和性能的方法具有以下优点:
本发明提供一种在Lua代码编译前检查语法错误和性能的方法,不需要运行Lua源代码,即可对Lua源代码进行检查并生成报告,从而更好的支持移动游戏中使用Lua满足热更新的需求,从而提高游戏的留存率。本发明解决了Lua没有好的IDE直接支持,Lua源代码中存在的错误排查效率低的问题。
附图说明
图1为本发明提供的一种在Lua代码编译前检查语法错误和性能的方法的流程示意图。
具体实施方式
为了使本发明所解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本发明提供一种在Lua代码编译前检查语法错误和性能的方法,不需要运行Lua源代码,即可对Lua源代码进行检查并生成报告,从而更好的支持移动游戏中使用Lua满足热更新的需求,从而提高游戏的留存率。本发明解决了Lua没有好的IDE直接支持,Lua源代码中存在的错误排查效率低的问题。
参考图1,本发明提供的在Lua代码编译前检查语法错误和性能的方法,可以扫描游戏项目中的所有Lua代码,生成报告供开发者查阅关于Lua的语法和性能问题。包括以下步骤:
步骤1,按从左到右方向,逐字符扫描Lua源程序,即对构成源程序的字符流进行扫描,根据构词规则识别到Lua源程序中的关键字,关键字可以为单词,并检查识别到的关键字是否存在错误,由此实现关键字检查;
步骤2,将步骤1识别到的各个关键字,按扫描顺序,组合成多个语法短语,并检查语法短语是否存在语法错误,由此实现语法检查;
例如,将单词序列组合成各类语法短语,如“程序”“语句”“表达式”等等,判断源程序在语法结构上是否正确。
步骤3,获取报告筛选条件,对Lua源程序进行语义分析,检查Lua源程序是否存在逻辑和性能问题;
作为一种具体实施例,对语法结构正确的源程序,进行上下文有关性质的语义审查,运行类型的审查等。
其中,报告筛选条件,包括以下选项中的一种或多种:
试图访问一个全局变量的未定义域;更改一个未定义的全局变量;访问未被初始化的局部变量;更改了一个局部变量但从未被访问;设置了一个局部变量但从未访问;未被使用的一个分配给局部变量的值;重定义了一个参数;覆盖了一个局部变量;覆盖了一个循环变量;重定义了一个局部变量;未被使用的循环变量。
步骤4,将检查到的关键字问题、语法问题以及逻辑和性能问题,生成检查报告。
在具体实现上,对于Lua源程序,首先解析Lua源程序的代码文件,并转换成抽象语法树;然后,基于所述抽象语法树,进行关键字检查,语法检查,以及逻辑和性能检查。
也就是说,关键字问题、语法问题以及逻辑和性能问题,是通过解析代码文件并转换成抽象语法树实现的。
抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntaxtree),是源代码的抽象语法结构的树状表现形式,本发明特指编程语言的源代码。和抽象语法树相对的是具体语法树(concrete syntaxtree),通常称作分析树(parse tree)。一般的,在源代码的翻译和编译过程中,语法分析器创建出分析树。一旦AST被创建出来,在后续的处理过程中,比如语义分析阶段,会添加一些信息。
在进行关键字、语法以及逻辑和性能检查时,本发明具体采用以下技术实现:
1)缺陷模式匹配:
预先根据代码分析经验,收集足够多的共性缺陷模式,将待分析代码与已有的共性缺陷模式进行模式匹配,从而完成软件的安全分析。
2)类型检查:
类型推断是指通过对代码中运算对象类型进行推理,从而保证代码中每条语句都针对正确的类型执行。具体的,首先预定义一套类型机制,包括类型等价、类型包含等推理规则,而后基于这一规则进行推理计算。
3)数据流分析:
本发明通过收集代码中引用到的变量信息,从而分析变量在程序中的赋值、引用以及传递等情况。对数据流进行分析可以确定变量的定义以及在代码中被引用的情况,同时还能够检查代码数据流异常,如引用在前赋值在后、只赋值无引用等。
下面介绍一个具体实施例:
以local foo=1为例,分词后可以得到如下的效果:
解析这段代码时,分词结果为:
生成的抽象语法树为:
因此,通过Parser将代码转化为抽象语法树(AST),该树定义了代码的结构,通过对树的处理,实现对代码的分析、优化等操作。
本发明不仅可以扫描Lua代码不规范问题以及语法错误,还可以检查到更多的逻辑和性能上的问题。
例1:
可见,源程序在结构上是正确的。但这种写法是存在问题的。在条件语句中,访问了未被初始化的局部变量。
例2:
function(bar)
Local bar={}
end
源程序重定义了参数,导致本次函数调用传参没有意义。
例3:
变量foo赋予的值expr1()未被使用。
本发明可提供十几条扫描参数选项,可根据开发者在运行该程序中是传入这些参数生成对应的报告。
包括但不仅限于以下参数选项:试图访问一个全局变量的未定义域;更改一个未定义的全局变量;访问未被初始化的局部变量;更改了一个局部变量但从未被访问;设置了一个局部变量但从未访问;未被使用的一个分配给局部变量的值;重定义了一个参数;覆盖了一个局部变量;覆盖了一个循环变量;重定义了一个局部变量;未被使用的循环变量;等等。
以上参数选项可以全选,也可针对性查看某个类别参数的报告,帮助开发者调试lua代码中的问题。
本发明提供了一套用户程序界面供开发者使用。该发明在不运行Lua代码的方式下,通过词法分析、语法分析、控制流、数据流分析等技术,对Lua代码进行扫描,验证Lua代码是否满足规范性、安全性、可靠性、可维护性等指标。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。
Claims (3)
1.一种在Lua代码编译前检查语法错误和性能的方法,其特征在于,包括以下步骤:
步骤1,按从左到右方向,逐字符扫描Lua源程序,根据构词规则识别到Lua源程序中的关键字,并检查识别到的关键字是否存在错误,由此实现关键字检查;
步骤2,将步骤1识别到的各个关键字,按扫描顺序,组合成多个语法短语,并检查语法短语是否存在语法错误,由此实现语法检查;
步骤3,获取报告筛选条件,对Lua源程序进行语义分析,检查Lua源程序是否存在逻辑和性能问题;
步骤4,将检查到的关键字问题、语法问题以及逻辑和性能问题,生成检查报告。
2.根据权利要求1所述的一种在Lua代码编译前检查语法错误和性能的方法,其特征在于,所述报告筛选条件,包括以下选项中的一种或多种:
试图访问一个全局变量的未定义域;更改一个未定义的全局变量;访问未被初始化的局部变量;更改了一个局部变量但从未被访问;设置了一个局部变量但从未访问;未被使用的一个分配给局部变量的值;重定义了一个参数;覆盖了一个局部变量;覆盖了一个循环变量;重定义了一个局部变量;未被使用的循环变量。
3.根据权利要求1所述的一种在Lua代码编译前检查语法错误和性能的方法,其特征在于,对于Lua源程序,首先解析Lua源程序的代码文件,并转换成抽象语法树;
然后,基于所述抽象语法树,进行关键字检查,语法检查,以及逻辑和性能检查。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111144473.5A CN113778899A (zh) | 2021-09-28 | 2021-09-28 | 一种在Lua代码编译前检查语法错误和性能的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111144473.5A CN113778899A (zh) | 2021-09-28 | 2021-09-28 | 一种在Lua代码编译前检查语法错误和性能的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113778899A true CN113778899A (zh) | 2021-12-10 |
Family
ID=78854233
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111144473.5A Pending CN113778899A (zh) | 2021-09-28 | 2021-09-28 | 一种在Lua代码编译前检查语法错误和性能的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113778899A (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130014093A1 (en) * | 2010-03-29 | 2013-01-10 | Soft4Soft Co., Ltd. | Code inspection executing system for performing a code inspection of abap source codes |
CN105354449A (zh) * | 2015-11-04 | 2016-02-24 | 北京鼎源科技有限公司 | 一种面向Lua语言的加扰混淆方法和解密方法 |
CN107168760A (zh) * | 2017-05-04 | 2017-09-15 | 腾讯科技(深圳)有限公司 | 语言的变量检测方法和装置 |
CN108614707A (zh) * | 2018-04-27 | 2018-10-02 | 深圳市腾讯网络信息技术有限公司 | 静态代码检查方法、装置、存储介质和计算机设备 |
CN111459500A (zh) * | 2020-06-17 | 2020-07-28 | 北京机电工程研究所 | 基于海鹰翼辉操作系统的安全编译方法及装置 |
CN111580825A (zh) * | 2020-04-28 | 2020-08-25 | 中国科学院软件研究所 | 一种面向机械臂程序开发编程语言的编译方法及系统 |
CN112052008A (zh) * | 2020-09-10 | 2020-12-08 | 腾讯科技(深圳)有限公司 | 代码检查方法、装置、计算机设备及计算机可读存储介质 |
CN112650675A (zh) * | 2020-12-23 | 2021-04-13 | 广州汉全信息科技股份有限公司 | 一种区块链的代码检测方法、装置和计算机设备 |
-
2021
- 2021-09-28 CN CN202111144473.5A patent/CN113778899A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130014093A1 (en) * | 2010-03-29 | 2013-01-10 | Soft4Soft Co., Ltd. | Code inspection executing system for performing a code inspection of abap source codes |
CN105354449A (zh) * | 2015-11-04 | 2016-02-24 | 北京鼎源科技有限公司 | 一种面向Lua语言的加扰混淆方法和解密方法 |
CN107168760A (zh) * | 2017-05-04 | 2017-09-15 | 腾讯科技(深圳)有限公司 | 语言的变量检测方法和装置 |
CN108614707A (zh) * | 2018-04-27 | 2018-10-02 | 深圳市腾讯网络信息技术有限公司 | 静态代码检查方法、装置、存储介质和计算机设备 |
CN111580825A (zh) * | 2020-04-28 | 2020-08-25 | 中国科学院软件研究所 | 一种面向机械臂程序开发编程语言的编译方法及系统 |
CN111459500A (zh) * | 2020-06-17 | 2020-07-28 | 北京机电工程研究所 | 基于海鹰翼辉操作系统的安全编译方法及装置 |
CN112052008A (zh) * | 2020-09-10 | 2020-12-08 | 腾讯科技(深圳)有限公司 | 代码检查方法、装置、计算机设备及计算机可读存储介质 |
CN112650675A (zh) * | 2020-12-23 | 2021-04-13 | 广州汉全信息科技股份有限公司 | 一种区块链的代码检测方法、装置和计算机设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Tufano et al. | On learning meaningful code changes via neural machine translation | |
Chen et al. | A survey of compiler testing | |
CN108459860B (zh) | 区块链智能合约形式化验证代码转换器及转换方法 | |
US8495591B2 (en) | Parsing of declarations in all branches of preprocessor conditionals | |
US8843907B2 (en) | Compiler with error handling | |
JP5791698B2 (ja) | アバップソースコードのコード検査遂行システム | |
Lindén et al. | Hfst—framework for compiling and applying morphologies | |
US20090313613A1 (en) | Methods and Apparatus for Automatic Translation of a Computer Program Language Code | |
Wagner et al. | Incremental analysis of real programming languages | |
US8850414B2 (en) | Direct access of language metadata | |
CN112131120B (zh) | 一种源代码缺陷检测方法及装置 | |
Drain et al. | Deepdebug: Fixing python bugs using stack traces, backtranslation, and code skeletons | |
Park et al. | JISET: javascript ir-based semantics extraction toolchain | |
Kuramitsu | Nez: practical open grammar language | |
CN116089302A (zh) | 一种针对Rust编程语言中UNSAFE代码片段缺陷的检测方法 | |
Annamaa et al. | An interactive tool for analyzing embedded SQL queries | |
Eberlein et al. | Semantic debugging | |
US20080141230A1 (en) | Scope-Constrained Specification Of Features In A Programming Language | |
Kreutzer et al. | Language-agnostic generation of compilable test programs | |
CN113778852A (zh) | 一种基于正则表达式的代码分析方法 | |
CN113778899A (zh) | 一种在Lua代码编译前检查语法错误和性能的方法 | |
Matsumura et al. | A declarative extension of parsing expression grammars for recognizing most programming languages | |
Deb et al. | Syntax Is All You Need: A Universal-Language Approach to Mutant Generation | |
CN114489653A (zh) | 基于编译器的数据处理方法、装置以及可读存储介质 | |
Grigorev et al. | String-embedded language support in integrated development environment |
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 |