CN113778899A - 一种在Lua代码编译前检查语法错误和性能的方法 - Google Patents

一种在Lua代码编译前检查语法错误和性能的方法 Download PDF

Info

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
Application number
CN202111144473.5A
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.)
Guangzhou 4399 Information Technology Co ltd
Original Assignee
Guangzhou 4399 Information 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 Guangzhou 4399 Information Technology Co ltd filed Critical Guangzhou 4399 Information Technology Co ltd
Priority to CN202111144473.5A priority Critical patent/CN113778899A/zh
Publication of CN113778899A publication Critical patent/CN113778899A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

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语言就是开发者为支持热更新而选择的一种脚本开发语言。
但是,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为例,分词后可以得到如下的效果:
Figure BDA0003284885570000051
解析这段代码时,分词结果为:
Figure BDA0003284885570000052
生成的抽象语法树为:
Figure BDA0003284885570000053
Figure BDA0003284885570000061
因此,通过Parser将代码转化为抽象语法树(AST),该树定义了代码的结构,通过对树的处理,实现对代码的分析、优化等操作。
本发明不仅可以扫描Lua代码不规范问题以及语法错误,还可以检查到更多的逻辑和性能上的问题。
例1:
Figure BDA0003284885570000062
可见,源程序在结构上是正确的。但这种写法是存在问题的。在条件语句中,访问了未被初始化的局部变量。
例2:
function(bar)
Local bar={}
end
源程序重定义了参数,导致本次函数调用传参没有意义。
例3:
Figure BDA0003284885570000071
变量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源程序的代码文件,并转换成抽象语法树;
然后,基于所述抽象语法树,进行关键字检查,语法检查,以及逻辑和性能检查。
CN202111144473.5A 2021-09-28 2021-09-28 一种在Lua代码编译前检查语法错误和性能的方法 Pending CN113778899A (zh)

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 (4)

* Cited by examiner, † Cited by third party
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
CN108614707A (zh) * 2018-04-27 2018-10-02 深圳市腾讯网络信息技术有限公司 静态代码检查方法、装置、存储介质和计算机设备
CN111459500A (zh) * 2020-06-17 2020-07-28 北京机电工程研究所 基于海鹰翼辉操作系统的安全编译方法及装置
CN111580825A (zh) * 2020-04-28 2020-08-25 中国科学院软件研究所 一种面向机械臂程序开发编程语言的编译方法及系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
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
CN108614707A (zh) * 2018-04-27 2018-10-02 深圳市腾讯网络信息技术有限公司 静态代码检查方法、装置、存储介质和计算机设备
CN111580825A (zh) * 2020-04-28 2020-08-25 中国科学院软件研究所 一种面向机械臂程序开发编程语言的编译方法及系统
CN111459500A (zh) * 2020-06-17 2020-07-28 北京机电工程研究所 基于海鹰翼辉操作系统的安全编译方法及装置

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) 区块链智能合约形式化验证代码转换器及转换方法
US8099721B2 (en) Parsing of declarations in all branches of preprocessor conditionals
US8762962B2 (en) Methods and apparatus for automatic translation of a computer program language code
Lindén et al. Hfst—framework for compiling and applying morphologies
US8843907B2 (en) Compiler with error handling
JP5791698B2 (ja) アバップソースコードのコード検査遂行システム
US8850414B2 (en) Direct access of language metadata
Wagner et al. Incremental analysis of real programming languages
Annamaa et al. An interactive tool for analyzing embedded SQL queries
Drain et al. Deepdebug: Fixing python bugs using stack traces, backtranslation, and code skeletons
Kuramitsu Nez: practical open grammar language
Park et al. Jiset: Javascript ir-based semantics extraction toolchain
Salls et al. {Token-Level} Fuzzing
CN116089302A (zh) 一种针对Rust编程语言中UNSAFE代码片段缺陷的检测方法
CN112131120B (zh) 一种源代码缺陷检测方法及装置
Kreutzer et al. Language-agnostic generation of compilable test programs
US20080141230A1 (en) Scope-Constrained Specification Of Features In A Programming Language
CN113778899A (zh) 一种在Lua代码编译前检查语法错误和性能的方法
Koskimies et al. The design of a language processor generator
Matsumura et al. A declarative extension of parsing expression grammars for recognizing most programming languages
CN113778852A (zh) 一种基于正则表达式的代码分析方法
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