getsky / royal-stag
PHP的PEG
dev-develop / 0.9.1.x-dev
2021-10-27 11:36 UTC
Requires
- php: >=5.6
Requires (Dev)
- phpunit/phpunit: 5.7.*
- squizlabs/php_codesniffer: 3.1.*
This package is not auto-updated.
Last update: 2024-09-27 00:34:23 UTC
README
RoyalStag是一个PHP库,用于解析文本,实现了解析表达式语法的优势,即PEG。其主要特点是语法直接设置在PHP代码中。这意味着您不需要学习任何第三方格式即可开始使用此库,并且不会失去您喜欢的IDE(语法高亮、重构等)提供的功能。
轻松集成到您的项目中
要将库集成到您的项目中,您无需花费大量时间和精力。该库的开放和灵活架构可以轻松集成到任何架构解决方案中,因为它不需要第三方工具生成解析器。您只需在composer.json中添加一行即可。
"getsky/royal-stag": "0.9.1@dev"
为什么不是正则表达式?
在许多情况下,它也缺乏解析文本的能力,例如需要递归定义规则的内嵌设计。它们也不提供适当的错误消息,这可以在开发和软件支持过程中节省大量时间。当然,易于学习也是一个优势。
为什么不是ANTLR和其他企业级解决方案?
ANTLR和其他类似库可能包含RoyalStag甚至更多的功能,但并非总是适合使用这样的大型库。这些库需要更多的时间来学习、与它们一起开发以及持续支持软件产品。
简单示例
以下示例展示了工作原理
<?php use GetSky\ParserExpressions\Rules\FirstOf; use GetSky\ParserExpressions\Rules\Optional; use GetSky\ParserExpressions\Rules\Sequence; use GetSky\ParserExpressions\Runner; use GetSky\ParserExpressions\Context; use GetSky\ParserExpressions\Error; require_once '../vendor/autoload.php'; $rule = new Sequence([new FirstOf(['Hello', 'Hi']), new Optional(' '), 'world']); $runner = new Runner($rule); $result = $runner->run('Hi world!'); $tree = $result->toArray();
变量包含
Array
(
[name] => Sequence
[value] => Hi world
[start] => 0
[end] => 8
[children] => Array
(
[0] => Array
(
[name] => FirstOf
[value] => Hi
[start] => 0
[end] => 2
[children] => Array
(
[0] => Array
(
[name] => Row
[value] => Hi
[start] => 0
[end] => 2
)
)
)
[1] => Array
(
[name] => Optional
[value] =>
[start] => 2
[end] => 3
[children] => Array
(
[0] => Array
(
[name] => Row
[value] =>
[start] => 2
[end] => 3
)
)
)
[2] => Array
(
[name] => Row
[value] => world
[start] => 3
[end] => 8
)
)
)
更多示例
请在此文件夹中查看更多示例。