minehub / prerequisites
评估依赖项的库
1.0.0
2023-02-08 17:26 UTC
Requires (Dev)
- pestphp/pest: ^1.22
This package is auto-updated.
Last update: 2024-09-09 00:58:35 UTC
README
用简单中缀语言编写的评估依赖项的库。
文档
关于
此库评估简单的C语言风格逻辑表达式,带有给定变量。它是为MineHub学术院的依赖项而制作的。
语法
如前所述,它使用C语言风格的逻辑表达式语法。
变量
变量名可以包含除以下字符之外的所有字符:()|&! - 这些是为其他语法保留的。变量只能是布尔型,并将从eval函数中加载。见 评估
在示例中,我们会使用true和false来使其更简单,但您可以使用任何想要的变量名,只要它不包含保留词。
运算符
您可以使用或(||)和与(&&)运算符,其中与的优先级更高,这意味着
true || true && false
将评估为true,而不是false。
分组
要更改优先级,可以使用分组(只需将其放在括号中)。所以这个
(true || false ) && false
将评估为false
否定
我们还可以否定变量和分组
!true
将评估为false,并且
!(true || false)
也将评估为false。
一切都是表达式!
一切都是表达式,所以您可以做类似的事情
(true || (false || true)) && (!(true || (false || true)) && false)
正式定义
TODO 可能不正确
<variable> ::= [^\s\(\)\|&!]+
<expression> ::= <variable>
<expression> ::= <expression>"||"<expression>
<expression> ::= <expression>"&&"<expression>
<expression> ::= "("<expression>")"
<expression> ::= "!"<expression>
评估
要评估字符串,只需创建 \MineHub\Prerequisities\Evaluator 实例并使用 eval 方法。此方法接受代码和变量数组
$evaluator = new Evaluator(); $evaluator->eval('!(!foo || bar) && (foo && !bar)', ['foo' => true, 'bar' => false]); // returns true