CN116502605A - 一种基于文法规则的源代码文本压缩方法及装置 - Google Patents
一种基于文法规则的源代码文本压缩方法及装置 Download PDFInfo
- Publication number
- CN116502605A CN116502605A CN202310413620.7A CN202310413620A CN116502605A CN 116502605 A CN116502605 A CN 116502605A CN 202310413620 A CN202310413620 A CN 202310413620A CN 116502605 A CN116502605 A CN 116502605A
- Authority
- CN
- China
- Prior art keywords
- source code
- grammar
- text
- compressed
- code text
- 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
- 238000007906 compression Methods 0.000 title claims abstract description 92
- 230000006835 compression Effects 0.000 title claims abstract description 80
- 238000000034 method Methods 0.000 title claims abstract description 67
- 230000008569 process Effects 0.000 claims description 33
- 230000006837 decompression Effects 0.000 claims description 15
- 238000004519 manufacturing process Methods 0.000 claims description 7
- 230000006870 function Effects 0.000 claims description 4
- 238000004590 computer program Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 3
- 230000000644 propagated effect Effects 0.000 description 2
- 230000010485 coping Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/14—Tree-structured documents
- G06F40/146—Coding or compression of tree-structured data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/253—Grammatical analysis; Style critique
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
- G06F40/289—Phrasal analysis, e.g. finite state techniques or chunking
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明公开了一种基于文法规则的源代码文本压缩方法及装置,涉及文本压缩技术领域,该方法包括压缩过程和解压缩过程;所述压缩过程具体包括:对待压缩源代码文本进行词法分析和语法分析,并构造符号表以存储符号信息,得到符号表和产生式调用序列;基于压缩算法,对组成待压缩源代码文本的符号表和产生式调用序列进行压缩。本发明能够提升代码文本的压缩效率和质量。
Description
技术领域
本发明涉及文本压缩技术领域,具体涉及一种基于文法规则的源代码文本压缩方法及装置。
背景技术
文本压缩就是用较少的位或字节来表示文本,以达到显著减小计算机中存储文本的空间大小的目的。通常来说,文本压缩指的都是无损压缩,其被广泛地运用于信息的存储中。
在面向源代码的压缩方法中,deflate算法(一种数据无损压缩算法)的使用较为普遍,deflate算法基于字典的LZ77算法(一种无损压缩算法),从源代码中找到重复子串,然后将重复子串替换成更短的引用字段,达到压缩的效果,并且利用霍夫曼编码方法对引用字段进一步压缩。但是,deflate算法的压缩效率不高,且压缩速度较慢(尤其是压缩大文件时),无法很好的满足大量源代码压缩的应用需求。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种基于文法规则的源代码文本压缩方法及装置,能够提升代码文本的压缩效率和质量。
为达到以上目的,本发明提供的一种基于文法规则的源代码文本压缩方法,包括压缩过程和解压缩过程;
所述压缩过程具体包括:
对待压缩源代码文本进行词法分析和语法分析,并构造符号表以存储符号信息,得到符号表和产生式调用序列;
基于压缩算法,对组成待压缩源代码文本的符号表和产生式调用序列进行压缩;
所述解压缩过程包括:
对于压缩后的源代码文本,从语法树的根节点开始依次读取产生式调用序列的序号,以在文法规则中找到对应的产生式;
根据当前产生式的右部符号构造当前节点的子节点,并对当前节点的子节点进行处理,直至得到压缩前源代码文本的语法树;
根据符号表处理语法树的叶子节点,得到压缩前的源代码文本。
在上述技术方案的基础上,所述对待压缩源代码文本进行词法分析和语法分析,并构造符号表以存储符号信息,得到符号表和产生式调用序列,具体步骤包括:
对待压缩源代码文本进行词法分析;
对待压缩源代码文本进行递归下降方式的语法分析;
在语法分析过程中,对分析过程对应的文法产生式的编号进行记录,以得到文法产生式的编号的序列;
构造符号表以存储待压缩源代码文本的符号信息,从而将待压缩源代码文本压缩为由一份符号表和一段产生式调用序列组成的文本。
在上述技术方案的基础上,
所述符号表中的符号包括类型、变量、函数和字面常量;
所述字面常量包括整数常量、浮点常量和字符串常量。
在上述技术方案的基础上,所述压缩算法为deflate算法。
在上述技术方案的基础上,所述对于压缩后的源代码文本,从语法树的根节点开始依次读取产生式调用序列的序号,以在文法规则中找到对应的产生式,具体步骤包括:
对压缩后的源代码文本进行解压缩处理,从语法树的根节点开始,按照顺序依次读取产生式调用序列的序号;
根据每次读取的产生式调用序列的序号,在文法规则中找到对应的产生式。
在上述技术方案的基础上,所述根据当前产生式的右部符号构造当前节点的子节点,并对当前节点的子节点进行处理,直至得到压缩前源代码文本的语法树,具体步骤包括:
根据当前产生式的右部符号构造当前节点的子节点,并按照从左至右的顺序依次处理子节点,对于所处理的子节点:
若当前子节点为对应文法规则中的终结符号,则当前子节点为叶子节点,之后继续向右处理其余子节点;
若当前子节点为对应文法规则中的非终结符号,则当前子节点为非叶子节点,之后继续处理该节点。
在上述技术方案的基础上,
当处理完当前节点的所有子节点之后,继续处理当前节点右边的兄弟节点,直至由根节点生成一颗完整的树结构,该树结构即为压缩前源代码文本的语法树。
在上述技术方案的基础上,所述根据符号表处理语法树的叶子节点,得到压缩前的源代码文本,具体步骤包括:
根据符号表,恢复语法树的叶子节点对应的变量名、常量名、字面常量或类型名,则语法树的叶子节点所组成的文本即为压缩前的源代码文本。
本发明提供的一种基于文法规则的源代码文本压缩装置,包括:
压缩模块,其用于对待压缩源代码文本进行词法分析和语法分析,并构造符号表以存储符号信息,得到符号表和产生式调用序列;以及基于压缩算法,对组成待压缩源代码文本的符号表和产生式调用序列进行压缩;
解压缩模块,其用于对于压缩后的源代码文本,从语法树的根节点开始依次读取产生式调用序列的序号,以在文法规则中找到对应的产生式;以及根据当前产生式的右部符号构造当前节点的子节点,并对当前节点的子节点进行处理,直至得到压缩前源代码文本的语法树;以及根据符号表处理语法树的叶子节点,得到压缩前的源代码文本。
在上述技术方案的基础上,所述对待压缩源代码文本进行词法分析和语法分析,并构造符号表以存储符号信息,得到符号表和产生式调用序列,具体过程包括:
对待压缩源代码文本进行词法分析;
对待压缩源代码文本进行递归下降方式的语法分析;
在语法分析过程中,对分析过程对应的文法产生式的编号进行记录,以得到文法产生式的编号的序列;
构造符号表以存储待压缩源代码文本的符号信息,从而将待压缩源代码文本压缩为由一份符号表和一段产生式调用序列组成的文本。
与现有技术相比,本发明的优点在于:创新性地使用了语法分析树结构进行代码文本的压缩工作,有效地改善了现有文本压缩方法应对大文本时压缩效率不足的问题,同时使压缩后的文本包含有源代码文本语法分析树的结构信息,提升了代码文本的压缩效率和质量。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中压缩过程的流程图;
图2为本发明实施例中解压缩过程的流程图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。
本发明实施例提供的一种基于文法规则的源代码文本压缩方法包括压缩过程和解压缩过程。
参见图1所示,对于压缩过程,具体步骤包括:
S11:对待压缩源代码文本进行词法分析和语法分析,并构造符号表以存储符号信息,得到符号表和产生式调用序列;
本发明中,对待压缩源代码文本进行词法分析和语法分析,并构造符号表以存储符号信息,得到符号表和产生式调用序列,具体步骤包括:
S111:对待压缩源代码文本进行词法分析;
S112:对待压缩源代码文本进行递归下降方式的语法分析;
S113:在语法分析过程中,对分析过程对应的文法产生式的编号进行记录,以得到文法产生式的编号的序列;
S114:构造符号表以存储待压缩源代码文本的符号信息,从而将待压缩源代码文本压缩为由一份符号表和一段产生式调用序列组成的文本。
本发明中,符号表中的符号包括类型、变量、函数和字面常量;字面常量包括整数常量、浮点常量和字符串常量。
以下结合一例子对该步骤进行说明。假设源代码文本为:i+i*i,根据文法的产生式规则,以及产生式规则,对i+i*i进行语法分析过程,且在递归下降的语法分析过程中,记录的文法产生式的编号的序列为:(2)(3)(1,i-ID)(1,i-ID)(1,i-ID),其中,i-ID为终结符变量i对应的符号表ID。
通过步骤S11,即可将一份待压缩的源代码文本压缩为由一份符号表和一段产生式调用序列组成的文本。
S12:基于压缩算法,对组成待压缩源代码文本的符号表和产生式调用序列进行压缩;本发明中,压缩算法为deflate算法。
即对于压缩后的符号表和产生式调用序列,可继续使用deflate算法等压缩算法进行压缩,从而进一步提高压缩效果,尤其是调用序列中,存在大量重复子串,在实际的应用过程中,deflate算法具有较好的压缩效果。
对于压缩过程,其详细实施过程为:首先构造符号表存储待压缩源代码文本中的变量以及数值,然后对待压缩源代码文本进行语法分析,构造对应的语法树,然后按照文法规则中的产生式调用序列,记录被调用的产生式的序号,以此构成产生式调用序列。
参见图2所示,对于解压缩过程,具体步骤包括:
S21:对于压缩后的源代码文本,从语法树的根节点开始依次读取产生式调用序列的序号,以在文法规则中找到对应的产生式;即与步骤S12对应,对压缩后的文本进行解压缩。
本发明中,对于压缩后的源代码文本,从语法树的根节点开始依次读取产生式调用序列的序号,以在文法规则中找到对应的产生式,具体步骤包括:
S211:对压缩后的源代码文本进行解压缩处理,从语法树的根节点开始,按照顺序依次读取产生式调用序列的序号;
S212:根据每次读取的产生式调用序列的序号,在文法规则中找到对应的产生式。
即从语法树的根节点开始(语法树的根节点即为文法规则的初始符号),按照顺序依次读取产生式调用序列的序号,然后根据每次读取的产生式调用序列的序号,在文法规则中找到对应的产生式。
S22:根据当前产生式的右部符号构造当前节点的子节点,并对当前节点的子节点进行处理,直至得到压缩前源代码文本的语法树;
本发明中,根据当前产生式的右部符号构造当前节点的子节点,并对当前节点的子节点进行处理,直至得到压缩前源代码文本的语法树,具体步骤包括:
根据当前产生式的右部符号构造当前节点的子节点,并按照从左至右的顺序依次处理子节点,对于所处理的子节点:
若当前子节点为对应文法规则中的终结符号,则当前子节点为叶子节点,之后继续向右处理其余子节点;
若当前子节点为对应文法规则中的非终结符号,则当前子节点为非叶子节点,之后继续处理该节点。
即由产生式对当前节点进行处理(该产生式的左部即为当前所处理的节点),根据当前产生式的右部符号构造当前节点的子节点,接下来,对当前节点的子节点进行处理,由于原递归下降语法分析过程遵循最左推导原则,因此按照从左向右的顺序依次处理子节点对于所处理的子节点,若当前子节点为对应文法规则中的终结符号,则当前子节点为叶子节点,之后继续向右处理其余子节点;若当前子节点为对应文法规则中的非终结符号,则当前子节点为非叶子节点,之后继续处理该节点。
本发明中,当处理完当前节点的所有子节点之后,继续处理当前节点右边的兄弟节点,循环执行步骤S21和S22,直至由根节点生成一颗完整的树结构,该树结构即为压缩前源代码文本的语法树。
S23:根据符号表处理语法树的叶子节点,得到压缩前的源代码文本。
本发明中,根据符号表处理语法树的叶子节点,得到压缩前的源代码文本,具体步骤包括:
根据符号表,恢复语法树的叶子节点对应的变量名、常量名、字面常量或类型名,则语法树的叶子节点所组成的文本即为压缩前的源代码文本。由此,源代码文本得以还原。
考虑到产生式规则的数目是固定不变的,本发明在处理大量源代码文本时,具有更显著的压缩效果。
对于解压缩过程,其详细实施过程为:
A:处理语法树的根节点;
B:以此读取产生式调用序列的序号,根据每次读取的产生式调用序列的序号,在文法规则中找到对应的产生式;
C:由产生式对当前节点进行处理,将当前产生式的右部符号构造当前节点的子节点;
D:对子节点进行处理,跳过叶子节点,处理非叶子节点,处理完当前节点的所有子节点之后,继续处理其右兄弟节点;
E:根据符号表,将语法树底部(即语法树的叶子节点)的变量符号替换为存储的相应的变量名,将数值符号替换为存储的相应的数值。
本发明实施例的基于文法规则的源代码文本压缩方法,对于压缩过程:首先通过词法分析构造代码文本的符号表,再通过语法分析构造相应的语法树,对语法树按照递归下降的顺序进行分析,记录被调用的产生式的序号,以此构成产生式的调用序列,经过以上操作生成由符号表和产生式调用序列组成的压缩文本,再对该文本进行字典压缩生成最终压缩文本;对于解压缩过程:首先将最终压缩文本还原为由符号表和产生式调用序列组成的压缩文本,再按照顺序处理产生式的调用序列,还原出源代码文本的语法树结构,再将语法树底部的变量及数值依据符号表进行替换,最终还原出源代码文本。
本发明创新性地使用了语法分析树结构进行代码文本的压缩工作,有效地改善了现有文本压缩方法应对大文本时压缩效率不足的问题,同时使压缩后的文本包含有源代码文本语法分析树的结构信息,提升了代码文本的压缩效率和质量。
在一种可能的实施方式中,本发明实施例还提供一种可读存储介质,可读存储介质位于PLC(Programmable Logic Controller,可编程逻辑控制器)控制器中,可读存储介质上存储有计算机程序,该程序被处理器执行时实现以下所述基于文法规则的源代码文本压缩方法的步骤,所述基于文法规则的源代码文本压缩方法包括压缩过程和解压缩过程。
所述压缩过程具体包括:
对待压缩源代码文本进行词法分析和语法分析,并构造符号表以存储符号信息,得到符号表和产生式调用序列;
基于压缩算法,对组成待压缩源代码文本的符号表和产生式调用序列进行压缩;
所述解压缩过程包括:
对于压缩后的源代码文本,从语法树的根节点开始依次读取产生式调用序列的序号,以在文法规则中找到对应的产生式;
根据当前产生式的右部符号构造当前节点的子节点,并对当前节点的子节点进行处理,直至得到压缩前源代码文本的语法分析树;
根据符号表处理语法分析树的叶子节点,得到压缩前的源代码文本。
存储介质可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
本发明实施例提供的一种基于文法规则的源代码文本压缩装置,包括压缩模块和解压缩模块。
压缩模块用于对待压缩源代码文本进行词法分析和语法分析,并构造符号表以存储符号信息,得到符号表和产生式调用序列;以及基于压缩算法,对组成待压缩源代码文本的符号表和产生式调用序列进行压缩;解压缩模块用于对于压缩后的源代码文本,从语法树的根节点开始依次读取产生式调用序列的序号,以在文法规则中找到对应的产生式;以及根据当前产生式的右部符号构造当前节点的子节点,并对当前节点的子节点进行处理,直至得到压缩前源代码文本的语法分析树;以及根据符号表处理语法分析树的叶子节点,得到压缩前的源代码文本。
本发明中,对待压缩源代码文本进行词法分析和语法分析,并构造符号表以存储符号信息,得到符号表和产生式调用序列,具体过程包括:
对待压缩源代码文本进行词法分析;
对待压缩源代码文本进行递归下降方式的语法分析;
在语法分析过程中,对分析过程对应的文法产生式的编号进行记录,以得到文法产生式的编号的序列;
构造符号表以存储待压缩源代码文本的符号信息,从而将待压缩源代码文本压缩为由一份符号表和一段产生式调用序列组成的文本。
以上所述仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
本发明是参照根据本发明实施例的方法、设备(系统)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
Claims (10)
1.一种基于文法规则的源代码文本压缩方法,其特征在于,包括压缩过程和解压缩过程;
所述压缩过程具体包括:
对待压缩源代码文本进行词法分析和语法分析,并构造符号表以存储符号信息,得到符号表和产生式调用序列;
基于压缩算法,对组成待压缩源代码文本的符号表和产生式调用序列进行压缩;
所述解压缩过程包括:
对于压缩后的源代码文本,从语法树的根节点开始依次读取产生式调用序列的序号,以在文法规则中找到对应的产生式;
根据当前产生式的右部符号构造当前节点的子节点,并对当前节点的子节点进行处理,直至得到压缩前源代码文本的语法树;
根据符号表处理语法树的叶子节点,得到压缩前的源代码文本。
2.如权利要求1所述的一种基于文法规则的源代码文本压缩方法,其特征在于,所述对待压缩源代码文本进行词法分析和语法分析,并构造符号表以存储符号信息,得到符号表和产生式调用序列,具体步骤包括:
对待压缩源代码文本进行词法分析;
对待压缩源代码文本进行递归下降方式的语法分析;
在语法分析过程中,对分析过程对应的文法产生式的编号进行记录,以得到文法产生式的编号的序列;
构造符号表以存储待压缩源代码文本的符号信息,从而将待压缩源代码文本压缩为由一份符号表和一段产生式调用序列组成的文本。
3.如权利要求2所述的一种基于文法规则的源代码文本压缩方法,其特征在于:
所述符号表中的符号包括类型、变量、函数和字面常量;
所述字面常量包括整数常量、浮点常量和字符串常量。
4.如权利要求3所述的一种基于文法规则的源代码文本压缩方法,其特征在于:所述压缩算法为deflate算法。
5.如权利要求3所述的一种基于文法规则的源代码文本压缩方法,其特征在于,所述对于压缩后的源代码文本,从语法树的根节点开始依次读取产生式调用序列的序号,以在文法规则中找到对应的产生式,具体步骤包括:
对压缩后的源代码文本进行解压缩处理,从语法树的根节点开始,按照顺序依次读取产生式调用序列的序号;
根据每次读取的产生式调用序列的序号,在文法规则中找到对应的产生式。
6.如权利要求5所述的一种基于文法规则的源代码文本压缩方法,其特征在于,所述根据当前产生式的右部符号构造当前节点的子节点,并对当前节点的子节点进行处理,直至得到压缩前源代码文本的语法树,具体步骤包括:
根据当前产生式的右部符号构造当前节点的子节点,并按照从左至右的顺序依次处理子节点,对于所处理的子节点:
若当前子节点为对应文法规则中的终结符号,则当前子节点为叶子节点,之后继续向右处理其余子节点;
若当前子节点为对应文法规则中的非终结符号,则当前子节点为非叶子节点,之后继续处理该节点。
7.如权利要求6所述的一种基于文法规则的源代码文本压缩方法,其特征在于:
当处理完当前节点的所有子节点之后,继续处理当前节点右边的兄弟节点,直至由根节点生成一颗完整的树结构,该树结构即为压缩前源代码文本的语法树。
8.如权利要求7所述的一种基于文法规则的源代码文本压缩方法,其特征在于,所述根据符号表处理语法树的叶子节点,得到压缩前的源代码文本,具体步骤包括:
根据符号表,恢复语法树的叶子节点对应的变量名、常量名、字面常量或类型名,则语法树的叶子节点所组成的文本即为压缩前的源代码文本。
9.一种基于文法规则的源代码文本压缩装置,其特征在于,包括:
压缩模块,其用于对待压缩源代码文本进行词法分析和语法分析,并构造符号表以存储符号信息,得到符号表和产生式调用序列;以及基于压缩算法,对组成待压缩源代码文本的符号表和产生式调用序列进行压缩;
解压缩模块,其用于对于压缩后的源代码文本,从语法树的根节点开始依次读取产生式调用序列的序号,以在文法规则中找到对应的产生式;以及根据当前产生式的右部符号构造当前节点的子节点,并对当前节点的子节点进行处理,直至得到压缩前源代码文本的语法树;以及根据符号表处理语法树的叶子节点,得到压缩前的源代码文本。
10.如权利要求7所述的一种基于文法规则的源代码文本压缩方法,其特征在于,所述对待压缩源代码文本进行词法分析和语法分析,并构造符号表以存储符号信息,得到符号表和产生式调用序列,具体过程包括:
对待压缩源代码文本进行词法分析;
对待压缩源代码文本进行递归下降方式的语法分析;
在语法分析过程中,对分析过程对应的文法产生式的编号进行记录,以得到文法产生式的编号的序列;
构造符号表以存储待压缩源代码文本的符号信息,从而将待压缩源代码文本压缩为由一份符号表和一段产生式调用序列组成的文本。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310413620.7A CN116502605A (zh) | 2023-04-14 | 2023-04-14 | 一种基于文法规则的源代码文本压缩方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310413620.7A CN116502605A (zh) | 2023-04-14 | 2023-04-14 | 一种基于文法规则的源代码文本压缩方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116502605A true CN116502605A (zh) | 2023-07-28 |
Family
ID=87321088
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310413620.7A Pending CN116502605A (zh) | 2023-04-14 | 2023-04-14 | 一种基于文法规则的源代码文本压缩方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116502605A (zh) |
-
2023
- 2023-04-14 CN CN202310413620.7A patent/CN116502605A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5936687B2 (ja) | ツリー構造の適応的エントロピー符号化方法 | |
Nevill-Manning et al. | Compression by induction of hierarchical grammars | |
CN101783788B (zh) | 文件压缩、解压缩方法、装置及压缩文件搜索方法、装置 | |
KR101049699B1 (ko) | 데이터의 압축방법 | |
CN103067022B (zh) | 一种整型数据无损压缩方法、解压缩方法及装置 | |
WO2019153700A1 (zh) | 编解码方法、装置及编解码设备 | |
US20110181448A1 (en) | Lossless compression | |
CN110021369B (zh) | 基因测序数据压缩解压方法、系统及计算机可读介质 | |
EP4082119A1 (en) | Systems and methods of data compression | |
CN104811209A (zh) | 一种抗最长匹配检测的压缩文件数据嵌入方法及装置 | |
US20100321218A1 (en) | Lossless content encoding | |
US11606103B2 (en) | Data compression method, data compression device, data decompression method, and data decompression device | |
CN116827351B (zh) | 一种石墨烯发热墙面温度智能监测系统 | |
CN103731154A (zh) | 一种基于语义分析的数据压缩算法 | |
Yang et al. | Efficient universal lossless data compression algorithms based on a greedy sequential grammar transform. 2. With context models | |
CN116502605A (zh) | 一种基于文法规则的源代码文本压缩方法及装置 | |
Jacob et al. | Comparative analysis of lossless text compression techniques | |
JP2020077969A (ja) | 符号化装置、復号装置、符号列のデータ構造、符号化方法、復号方法、符号化プログラム、復号プログラム | |
Oswald et al. | An efficient text compression algorithm-data mining perspective | |
KR20160106229A (ko) | 문맥기반 분포데이터의 블럭화를 이용한 허프만 부호화의 효율화 방법 및 그 장치 | |
CN113986820A (zh) | 一种lz4格式文件转换为gzip格式文件的方法 | |
CN112262578B (zh) | 点云属性编码方法和装置以及点云属性解码方法和装置 | |
CN102891730B (zh) | 基于bcd码卫星短报文的编码方法和装置 | |
CN114429200A (zh) | 规范化哈夫曼编解码方法及神经网络计算芯片 | |
Kieffer et al. | Survey of grammar-based data structure compression |
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 |