phpflo / phpflo-fbp
php的fbp实现
v1.2.0
2017-03-26 20:41 UTC
Requires
- php: >=7.0.0
- symfony/yaml: >=2.7 <=4.0
Requires (Dev)
- mikey179/vfsstream: ^1.6
- phpunit/phpunit: ^5.0
README
基于流的编程协议(FBP)配置文件加载器,使用FBP领域特定语言(DSL)。
简介
这个库允许您加载和解析您的phpflo项目的配置。如果您想将旧的JSON配置转换为FBP规范,它也可以独立运行。支持的配置格式是JSON(.json)、YAML(.yml)和FBP(.fbp),输出是类型为FbpDefinition的对象。这允许您以不同的格式输出解析内容,从数组、FBP、JSON到YAML。
代码示例
基本用法
// load FBP config $defintiion = PhpFlo\Loader\Loader::load('my/fbp/config/file.fbp');
您可以这样加载JSON、YAML和FBP。
解析器本身
$myFbpConfig = <<<EOF # Read a file and cout its lines 'test.file' -> IN ReadFile(ReadFile) ReadFile(ReadFile) OUT -> IN SplitbyLines(SplitStr) ReadFile() ERROR -> IN Display(Output) SplitbyLines() OUT -> IN CountLines(Counter) CountLines() COUNT -> IN Display() EOF; $parser = new PhpFlo\Fbp\FbpParser(); $definition = $parser->run($myFbpConfig);
将您的流程输出为某种格式
$json = PhpFlo\Fbp\FbpDumper::toJson($definition); $yaml = PhpFlo\Fbp\FbpDumper::toYaml($definition); $fbp = PhpFlo\Fbp\FbpDumper::toFbp($definition);
定义具有以下架构
$schema = [ 'properties' => ['name' => '',], 'initializers' => [ [ 'data' => '', 'tgt' => [ 'process' => '', 'port' => '', ], ], ], 'processes' => [ 'ReadFile' => [ 'component' => '', 'metadata' => [ 'label' => '', ], ], ], 'connections' => [ [ 'src' => [ 'process' => '', 'port' => '', ], 'tgt' => [ 'process' => '', 'port' => '', ], ], ], ]
FBP DSL定义
如果您想编写定义文件,这里有一些规则
通用语法:
// <process_alias>(<optional_process_name>) <port><[optional_port_number]> -> <port><[optional_port_number]> <process_alias>(<optional_process_name>)
// examples
ReadFile(ReadFile) OUT -> IN SplitbyLines(SplitStr)
ReadFile() OUT -> IN SplitbyLines()
ReadFile() out[1] -> In[3] SplitbyLines()
- 所有元素都是区分大小写的
- 过程定义末尾的括号是必需的(即使为空):
<process>()
- 过程名称是w+
- 端口号可以是[a-zA-Z_]
- 每一行确定一个新的事件链,意味着至少有两个过程和两个连接端口,由" -> "分隔,如
<process>() <port> -> <port> <process>()
- 否则有一个
<initializer> -> <port> <process>()
为了更好地理解,用于定义检查的整个正则表达式是
((?P<inport>[a-zA-Z_]+(\[(?P<inport_no>[0-9]+)\])?)\s)?((?P<process>[\w\/]+)(\((?P<component>[\w\/\\\.]+)?\))?)(\s(?P<outport>[a-zA-Z_]+(\[(?P<outport_no>[0-9]+)\])?))?
注释:您可以添加注释和空行以提高可读性和文档。如果第一行有注释,它将用作定义的名称。
# this definition reads files and counts their lines
ReadFile() OUT -> IN SplitbyLines()
ReadFile() out -> In SplitbyLines()
# some comment
# and for readability :-)
ReadFile(ReadFile) OUT -> IN SplitbyLines(SplitStr)
初始化器:您可以为图形设置初始值
'test.file' -> IN ReadFile()
多个定义:您可以在一行中包含完整的定义链以增强事件链的可视性
GreetUser() DATA -> OPTIONS Render() OUT -> STRING WriteResponse()
安装
通过composer进行常规安装
composer require phpflo/phpflo-fbp