alamirault / grammar
该软件包的最新版本(dev-master)没有可用的许可证信息。
dev-master
2019-04-24 12:34 UTC
Requires
- phpunit/phpunit: ^8.1
- symfony/expression-language: ^4.2
- symfony/var-dumper: ^4.2
- wouterj/peg: dev-master
This package is auto-updated.
Last update: 2024-09-25 07:26:05 UTC
README
此软件包允许您使用 PHP OOP 编写语法。
安装
使用 Composer 安装 PHP 语法解析器
composer require alamirault/grammar
或将软件包添加到您的 composer.json
require: { // ... "alamirault/grammar": "~1.0" // check packagist.org for more tags // ... }
用法
简单示例
$floatMarker = new OrOperator( new Constant(","), new Constant(".") ); $digit = new Pattern("[0-9]"); $digits = new Repeat($digit); $float = new AndOperator($digits, $floatMarker, $digits); $grammar = new Grammar('Float', [ new Definition("Float", $float), ]); dump($grammar->parse("12.34")); Alamirault\Grammar\Result {#11 -value: "12.34" -length: 5 -offset: 0 -match: true }
更复杂的示例
$oneSpace = new Constant(' '); $spaces = new Repeat($oneSpace); $action = new OrOperator( new Constant("ALLOW"), new Constant("REFUSE") ); $if = new Constant("if"); $userType = new Constant("userType"); $userTypeValues = new OrOperator( new Constant("WRITER"), new Constant("ACTOR") ); $leftParenthesis = new Constant('('); $rightParenthesis = new Constant(')'); $comma = new Constant(','); $arrayElements = new AndOperator( new Repeat( new OrOperator( $spaces, new AndOperator($userTypeValues, $comma) ) ), $userTypeValues ); $in = new OrOperator( new Constant('in'), new Constant('IN') ); $rule = new AndOperator($action, $spaces, $if, $spaces, $userType, $spaces, $in, $spaces, $leftParenthesis, $arrayElements, $rightParenthesis); $grammar = new Grammar('Rule1', [ new Definition("Rule1", $rule), ]); dump($grammar->parse("ALLOW if userType in (WRITER, ACTOR)")); will return Alamirault\Grammar\Result {#26 -value: "ALLOW if userType in (WRITER, ACTOR)" -length: 36 -offset: 0 -match: true }
通过您的自定义类型扩展软件包:列表示例
运行测试套件
./vendor/bin/phpunit
许可证
本项目根据 BSD-3 条款许可证发布。有关完整的版权和许可证信息,请查看与源代码一起分发的 LICENSE 文件。
贡献
如果您想为项目做出贡献并使其变得更好,您的帮助非常受欢迎。