minehub/prerequisites

评估依赖项的库

1.0.0 2023-02-08 17:26 UTC

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