CN105404497B - 一种逻辑表达式的解析方法及装置 - Google Patents
一种逻辑表达式的解析方法及装置 Download PDFInfo
- Publication number
- CN105404497B CN105404497B CN201510701410.3A CN201510701410A CN105404497B CN 105404497 B CN105404497 B CN 105404497B CN 201510701410 A CN201510701410 A CN 201510701410A CN 105404497 B CN105404497 B CN 105404497B
- Authority
- CN
- China
- Prior art keywords
- resolved
- logical expression
- expression
- logical
- arithmetic element
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30029—Logical and Boolean instructions, e.g. XOR, NOT
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种逻辑表达式的解析方法及装置,该解析方法获取待解析的逻辑表达式;拆分所述待解析的逻辑表达式以获得至少一个运算单元;针对所述至少一个运算单元进行运算以得到每个运算单元的运算值;将每个运算单元的运算值代入待解析的逻辑表达式;及针对代入运算值后的待解析的逻辑表达式进行运算以获取最终结果。本发明避免现有解析方法的复杂逻辑运算,可以迅速的运算出结果并提高运算正确率。
Description
技术领域
本发明实施例涉及计算机数据处理技术领域,尤其涉及一种逻辑表达的解析方法及装置。
背景技术
在各种编码过程中,经常会碰到需要解析逻辑表达式的场景。通常,逻辑表达式的形式如下:“=”,“>”,“<”或“in”等运算符连着的基本运算单元,运算单元之间用“&”或“|”关系符连接,且可能有多重括号组合连起来形成的逻辑表达式。在解析运算过程中,运算符的优先级别为:算术运算符>字符运算符>关系运算符>逻辑运算符>赋值运算符。
针对逻辑表达式,通常的解析运算方法是:依据运算符的优先级别针对逻辑表达式进行拆分;依据给定数据开始计算最高优先级别运算单元的结果;然后逐级计算最高优先级别运算单元的同级或下一级运算单元的结果直至所有运算单元结果计算完成;最后将所有运算结果依据优先级别进行合并。这样实现起来特别麻烦,尤其是遇到复杂的逻辑表达式时,效率非常低而且容易出错。
发明内容
本发明实施例提供一种逻辑表达式的解析方法及装置,以提高逻辑表达式的解析速度及正确率。
本发明实施例提供了一种逻辑表达式的解析方法,包括:
获取待解析的逻辑表达式;
拆分所述待解析的逻辑表达式以获得至少一个运算单元;
针对所述至少一个运算单元进行运算以得到每个运算单元的运算值;
将每个运算单元的运算值代入待解析的逻辑表达式;及
针对代入运算值后的待解析的逻辑表达式进行运算以获取最终结果。
本发明实施例提供了一种逻辑表达式的解析装置,包括:
获取模块,用于获取待解析的逻辑表达式;
拆分模块,用于拆分所述待解析的逻辑表达式以获得至少一个运算单元;
值运算模块,用于针对所述至少一个运算单元进行运算以得到每个运算单元的运算值;
代入模块,用于将每个运算单元的运算值代入待解析的逻辑表达式;
结果运算模块,用于针对代入运算值后的待解析的逻辑表达式进行运算以获取最终结果。
本发明实施例中提供的逻辑表达式的解析方法及装置,通过获取待解析的逻辑表达式;拆分所述待解析的逻辑表达式以获得至少一个运算单元;针对所述至少一个运算单元进行运算以得到每个运算单元的运算值;将每个运算单元的运算值代入待解析的逻辑表达式;及针对代入运算值后的待解析的逻辑表达式进行运算以获取最终结果。由于本发明实施例简单的将逻辑表达式进行拆分再进行各运算单元值计算,然后针对代入运算值的待解析逻辑表达式的总体运算以获取最终结果,避免现有解析方法的复杂逻辑运算,可以迅速的运算出结果并提高运算正确率。
附图说明
图1为本发明实施例一提供的一种逻辑表达式的解析方法的流程示意图;
图2为本发明实施例二提供的一种逻辑表达式的解析装置的结构示意图。
具体实施方式
下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各项步骤的顺序可以被重新安排。当其步骤完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
实施例一
图1为本发明实施例一提供的一种逻辑表达式的解析方法,该方法可以由逻辑表达式的解析装置执行,其中该解析装置可由软件和/或硬件实现,一般可集成在计算机中。
参见图1,本实施例的方法包括如下步骤:
步骤S100、获取待解析的逻辑表达式。
在编码过程中,可能经常需要解析逻辑表达式。当需要进行逻辑表达式的解析时,可获取用户输入的待解析的逻辑表达式。逻辑表达式是由运算符、运算对象、圆括号或关系符等组成的一个序列,它是由常量、变量、函数等用运算符连接而成的式子。逻辑表达式是构成程序代码的最基本要素。请参考以下逻辑表达式1及逻辑表达式2:
逻辑表达式1:
((H010001in 1030001)&((B050004=1234567)|(B050009=1234567)|(B040002=1234567))&(B050016in 111,124,124,124,119,120,135,123,126,118,999,138,136)
逻辑表达式2:
(H010001in 1030001,1030009,1030005,1030003,1030002,1030004,1030029,1030027,1030035,1030026,1030028,1030022,1039999,1030010,1030032,1039999,1030036,1039999,1030030)&((B050004=6565465)|(B050009=6565465)|(B040002=6565465))&(B050016in 111,124,124,124,119,120,135,123,126,118,999,138,136)
上述逻辑表达式1和逻辑表达式2是由运算符、运算对象、关系符和圆括号组成。
步骤S120、拆分所述待解析的逻辑表达式以获得至少一个运算单元。
具体的,利用正则表达法将待解析的逻辑表达式进行拆分以得获得至少一个运算单元。
所述正则表达法,又称正规表示法、常规表示法(Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。正则表达法使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
示例性的,针对以下待解析的逻辑表达式进行拆分过程如下:
((变量a=xx)|(变量b=yy))&(变量c=zz)&(变量d in xx,yy,zz)
现针对上述待解析的逻辑表达式,利用正则表达法拆分出每一个运算单元:
(变量a=xx);
(变量b=yy);
(变量c=zz);
(变量d in xx,yy,zz);
步骤S130、针对每个运算单元进行运算以得到每个运算单元的运算值。
具体的,针对运算单元(变量a=xx);(变量b=yy);(变量c=zz);(变量d in xx,yy,zz)分别逐一遍历运算以得到每个运算单元的运算值,其中每个运算单元的运算值为true或false。例如,针对(变量a=xx),先从给定数据中判断是否存在对应的变量a的值,且值为xx,如是存在则运算结果为true,否则为false。在本实施例中,上述运算单元(变量a=xx);(变量b=yy);(变量c=zz);(变量d in xx,yy,zz)分别运算得到的运算值为true;false;true;true。
步骤S140、将每个运算单元的运算值代入待解析的逻辑表达式。
将上述运算得到的运算值分别代入混合表达式,即得到表达式:((true)|(false))&(true)&(true),在此表达式中,所有逻辑关系等与混合表达式不变。
步骤S150、针对代入运算值后的待解析的逻辑表达式进行运算以获取最终结果。
具体的,可利用java.script.ScriptEngineManager技术将上述代入运算值后的逻辑表达式((true)|(false))&(true)&(true)进行运算以获取最终结果。
优选的,为了针对混合表达式及一般表达式的解析方法进行区分,在步骤S120拆分所述待解析的逻辑表达式以获得至少一个运算单元之前,还包括:
判断待解析的逻辑表达式是否为混合表达式;
当判断待解析的逻辑表达式为混合表达式,触发执行所述拆分待解析的逻辑表达式以获取至少一个运算单元;
当判断待解析的逻辑表达式为一般表达式,直接运算该待解析的逻辑表达式的以获取最终结果。
在本实施例中,将所述逻辑表达式分为混合表达式及一般表达式两种。所述混合表达式是指该逻辑表达式由算术运算符、字符运算符、关系运算符、逻辑运算符及赋值运算符等多重运算符组成的逻辑运算式。所述一般表达式是指该逻辑表达式的结构较简单,并没完全包括上述所有运算符。
增加此判断步骤是为了将混合表达式及一般表达式进行区分。一般表达式由于结构较简单,可直接进行运算而无需进行运算单元的折分;混合表达式由于结构复杂,因此需进行运算单元的拆分来分别运算。
本发明实施例的技术方案,通过获取待解析的逻辑运算式,利用正则表达法针对该待解析的逻辑表达式进行折分以得到至少一个运算单元,针对每一运算单元进行运算以获取运算值,将得到的运算值分别代入等解析的逻辑表达式,并针对代入运算值后的待解析的逻辑表达式进行运算获取最终结果。由于本发明实施例简单的将逻辑表达式进行拆分再进行各运算单元值计算,然后用javax.script.ScriptEngineManager技术进行总体运算,避免现有解析方法的复杂逻辑运算,可以迅速的运算出结果并提高运算正确率。
实施例二
图2为本发明实施例二提供的一种逻辑表达式的解析装置的结构示意图。所述解析装置配置在计算机中。本实施例的解析装置具体包括:获取模块21、拆分模块22、值运算模块23、代入模块24及结果运算模块25。
其中,所述获取模块21,用于获取待解析的逻辑表达式。所述逻辑表达式可能是混合表达式或一般表达式。
拆分模块22,用于拆分所述待解析的逻辑表达式以得到至少一个运算单元。上述拆分是利用正则表达法混合表达式进行拆分以得到至少一个运算单元。
值运算模块23,用于针对每个运算单元进行运算以得到每个运算单元的运算值。即针对折分得到的每一个运算单元,逐一遍历并运算每一运算单元的运算值。
代入模块24,用于将每个运算单元的运算值代入待解析的逻辑表达式。
结果运算模块25,用于针对整个代入运算值后的待解析的逻辑表达式进行运算以获取最终结果。具体的,可利用java.script.ScriptEngineManager技术将上述代入运算值后的表达式((true)|(false))&(true)&(true)进行运算以获取最终结果。
优选的,所述解析装置还包括一判断模块,用于:
在拆分所述待解析的逻辑表达式以获得至少一个运算单元之前,判断待解析的逻辑表达式是否为混合表达式;当判断待解析的逻辑表达式为混合表达式,触发所述拆分模块执行对应操作;当判断待解析的逻辑表达式为一般表达式,直接运算该待解析的逻辑表达式的以获取最终结果。
本实施例的技术方案提供的逻辑表达式的解析装置,其中利用获取模块21获取待解析的逻辑表达式,利用拆分模块22拆分所述待解析的逻辑表达式以得到至少一个运算单元;利用值运算模块23针对每个运算单元进行运算以得到每个运算单元的运算值;利用代入模块24将每个运算单元的运算值代入混合表达式;最后利用结果运算模块25针对整个代入运算值后的表达式进行运算以获取最终结果。
由于本发明实施例简单的将逻辑表达式进行拆分再进行各运算单元值计算,然后用javax.script.ScriptEngineManager技术进行总体运算,避免现有解析方法的复杂逻辑运算,可以迅速的运算出结果并提高运算正确率。
上述产品可执行本发明任意实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明任意实施例所提供的方法。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (6)
1.一种逻辑表达式的解析方法,其特征在于,包括:
获取待解析的逻辑表达式;
利用正则表达法拆分所述待解析的逻辑表达式以获得至少一个运算单元,其中,正则表达法使用单个字符串来描述、匹配一系列符合预设句法规则的字符串;
针对所述至少一个运算单元进行运算以得到每个运算单元的运算值;
将每个运算单元的运算值代入待解析的逻辑表达式;及
利用javax.script.ScriptEngineManager技术,针对代入运算值后的待解析的逻辑表达式进行运算以获取最终结果。
2.根据权利要求1所述的方法,其特征在于,在拆分所述待解析的逻辑表达式以获得至少一个运算单元之前,还包括:
判断待解析的逻辑表达式是否为混合表达式;
当判断待解析的逻辑表达式为混合表达式,触发执行所述拆分待解析的逻辑表达式以获取至少一个运算单元;
当判断待解析的逻辑表达式为一般表达式,直接运算该待解析的逻辑表达式的以获取最终结果。
3.根据权利要求2所述的方法,其特征在于,所述混合表达式是指该逻辑表达式由算术运算符、字符运算符、关系运算符、逻辑运算符及赋值运算符组成的逻辑运算式。
4.一种逻辑表达式的解析装置,其特征在于,包括:
获取模块,用于获取待解析的逻辑表达式;
拆分模块,用于利用正则表达法拆分所述待解析的逻辑表达式以获得至少一个运算单元,其中,正则表达法使用单个字符串来描述、匹配一系列符合预设句法规则的字符串;
值运算模块,用于针对所述至少一个运算单元进行运算以得到每个运算单元的运算值;
代入模块,用于将每个运算单元的运算值代入待解析的逻辑表达式;
结果运算模块,用于利用javax.script.ScriptEngineManager技术,针对代入运算值后的待解析的逻辑表达式进行运算以获取最终结果。
5.根据权利要求4所述的装置,其特征在于,还包括:
判断模块,用于在拆分所述待解析的逻辑表达式以获得至少一个运算单元之前,判断待解析的逻辑表达式是否为混合表达式;当判断待解析的逻辑表达式为混合表达式,触发所述拆分模块执行对应操作;当判断待解析的逻辑表达式为一般表达式,直接运算该待解析的逻辑表达式的以获取最终结果。
6.根据权利要求5所述的装置,其特征在于,所述混合表达式是指该逻辑表达式由算术运算符、字符运算符、关系运算符、逻辑运算符及赋值运算符组成的逻辑运算式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510701410.3A CN105404497B (zh) | 2015-10-26 | 2015-10-26 | 一种逻辑表达式的解析方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510701410.3A CN105404497B (zh) | 2015-10-26 | 2015-10-26 | 一种逻辑表达式的解析方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105404497A CN105404497A (zh) | 2016-03-16 |
CN105404497B true CN105404497B (zh) | 2018-05-25 |
Family
ID=55470001
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510701410.3A Active CN105404497B (zh) | 2015-10-26 | 2015-10-26 | 一种逻辑表达式的解析方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105404497B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107967246A (zh) * | 2016-10-19 | 2018-04-27 | 航天信息股份有限公司 | 报表计算方法以及装置 |
CN107301080A (zh) * | 2017-06-30 | 2017-10-27 | 上海自仪泰雷兹交通自动化系统有限公司 | 轨旁控制单元中基于数据配置的c语言代码自动生成系统 |
CN108198066B (zh) * | 2017-11-29 | 2021-10-15 | 南京农纷期电子商务有限公司 | 一种金融行业自动化计费系统 |
CN108875952B (zh) * | 2018-06-06 | 2022-01-25 | 杨露 | 一种基于fpga的复杂逻辑判据自适应智能推理方法 |
CN109242253A (zh) * | 2018-08-06 | 2019-01-18 | 智车优行科技(上海)有限公司 | 物料清单提取方法、装置以及存储介质 |
CN111258547A (zh) * | 2018-12-03 | 2020-06-09 | 北京京东尚科信息技术有限公司 | 运算处理方法、系统、装置以及计算机可读介质 |
CN109614597B (zh) * | 2018-12-14 | 2023-04-07 | 中通服公众信息产业股份有限公司 | 一种逻辑表达式转换拆分组装方法 |
CN110058848A (zh) * | 2019-02-27 | 2019-07-26 | 贵州力创科技发展有限公司 | 一种智能表达式解析平台及方法 |
CN111767071A (zh) * | 2020-07-02 | 2020-10-13 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种数据的显示调整方法、装置及电子设备 |
CN112712075B (zh) * | 2020-12-30 | 2023-12-01 | 科大讯飞股份有限公司 | 算式检测方法、电子设备和存储装置 |
CN112765969A (zh) * | 2021-01-11 | 2021-05-07 | 成都深思科技有限公司 | 一种高效实时的表达式语法验证方法及系统 |
CN113609821B (zh) * | 2021-06-30 | 2023-07-18 | 北京新氧科技有限公司 | 一种正则表达式转换方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101782894A (zh) * | 2009-01-20 | 2010-07-21 | 索尼公司 | 算术程序转换装置、算术程序转换方法及程序 |
CN102122242A (zh) * | 2011-03-03 | 2011-07-13 | 广州东芝白云电器设备有限公司 | 继电保护逻辑方程解析方法 |
CN102446112A (zh) * | 2010-10-12 | 2012-05-09 | 无锡江南计算技术研究所 | 指令处理装置和处理器、指令翻译装置和方法 |
CN102541611A (zh) * | 2010-12-21 | 2012-07-04 | 无锡江南计算技术研究所 | 指令翻译装置和方法、指令处理装置和处理器 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
BR112015010016A2 (pt) * | 2012-11-07 | 2017-07-11 | Koninklijke Philips Nv | compilador, computador, método de compilação e programa de computador |
-
2015
- 2015-10-26 CN CN201510701410.3A patent/CN105404497B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101782894A (zh) * | 2009-01-20 | 2010-07-21 | 索尼公司 | 算术程序转换装置、算术程序转换方法及程序 |
CN102446112A (zh) * | 2010-10-12 | 2012-05-09 | 无锡江南计算技术研究所 | 指令处理装置和处理器、指令翻译装置和方法 |
CN102541611A (zh) * | 2010-12-21 | 2012-07-04 | 无锡江南计算技术研究所 | 指令翻译装置和方法、指令处理装置和处理器 |
CN102122242A (zh) * | 2011-03-03 | 2011-07-13 | 广州东芝白云电器设备有限公司 | 继电保护逻辑方程解析方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105404497A (zh) | 2016-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105404497B (zh) | 一种逻辑表达式的解析方法及装置 | |
US9134967B1 (en) | Method of providing interactive usage descriptions based on source code analysis | |
US10269087B2 (en) | Language translation using preprocessor macros | |
CN110543421B (zh) | 基于测试用例自动生成算法的单元测试自动执行方法 | |
CN110569628B (zh) | 一种代码的混淆方法以及装置、计算机设备、存储介质 | |
US20170228309A1 (en) | System and method for equivalence class analysis-based automated requirements-based test case generation | |
CN106547527B (zh) | 一种JavaScript文件构建方法及装置 | |
WO2005006119A3 (en) | An extensible type system for representing and checking consistency of program components during the process of compilation | |
CN104036003B (zh) | 搜索结果整合方法和装置 | |
CN105204917B (zh) | 在应用程序启动时加载配置文件的方法及装置 | |
CN111523283B (zh) | 一种验证处理器的方法、装置、电子设备及存储介质 | |
CN101710305B (zh) | 一种计算机软件白盒测试的实现方法及系统 | |
KR102013657B1 (ko) | 연관된 다중 파일 정적 분석 장치 | |
EP3379443A1 (en) | Method and computer device to deobfuscate a source code | |
US20170075665A1 (en) | Program information generation system, method, and computer program | |
CN112287342A (zh) | 物联网固件动态检测方法、装置、电子设备以及存储介质 | |
Rahimian et al. | RESource: a framework for online matching of assembly with open source code | |
Kawaguchi et al. | Dsolve: Safety verification via liquid types | |
CN111580821B (zh) | 脚本绑定方法、装置、电子设备及计算机可读存储介质 | |
WO2016181526A1 (ja) | 制御ロジック図解析装置および制御ロジック図解析方法 | |
CN107180193A (zh) | 一种将程序代码转换成数据约束的方法和装置 | |
RU94016U1 (ru) | Система обнаружения обфусцированного кода вредоносного программного обеспечения | |
US20020100026A1 (en) | System and method for generating machine-language code from readable text code for information filtering | |
Ali et al. | An enhanced generic pipeline model for code clone detection | |
Bruse | Extremal fixpoints for higher-order modal logic |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |