wikimedia / webidl
PHP 的 WebIDL 解析器
Requires
- php: >=7.4
- wikimedia/wikipeg: ^2.0.6
Requires (Dev)
- ext-json: *
- mediawiki/mediawiki-codesniffer: 40.0.1
- mediawiki/mediawiki-phan-config: 0.12.0
- mediawiki/minus-x: 1.1.1
- ockcyp/covers-validator: 1.6.0
- php-parallel-lint/php-console-highlighter: 1.0.0
- php-parallel-lint/php-parallel-lint: 1.3.2
- phpunit/phpunit: 9.5.28
- wikimedia/update-history: 1.0.1
README
WebIDL 是一个 Web IDL 的解析器,一种以可互操作的方式指定网络 API 的语言。这个库支持 PHP,与 JavaScript 和浏览器中的 webidl2 精神相同(但没有任何代码共享)。
在 Phabricator 上报告问题。
安装
此包可在 Packagist 上找到
$ composer require wikimedia/webidl
用法
WebIDL 提供一个函数 parse
,它将 WebIDL 字符串转换为语法树。
use Wikimedia\WebIDL; $tree = WebIDL::parse("string of WebIDL");
parse()
方法可以可选地接受一个包含以下键的选项数组
concrete
: 布尔值,表示结果是否应包括 EOF 节点。sourceName
: 源名称,通常是一个文件名。如果您传递一个值,错误和验证对象可以指示它们的来源。
AST(抽象语法树)
AST 输出与 webidl2 AST 文档 匹配,其中 PHP 关联数组以通常的方式替换 JavaScript 对象(即,使用 json_decode($ast, true)
在 PHP 中反序列化 JSON 输出)。
简要来说,WebIDL 输入
interface _Iroha : _Magic {};
_Iroha includes _Color;
在解析后给出以下 PHP 数组
[ [ "type" => "interface", "name" => "Iroha", "inheritance" => "Magic", "members" => [], "extAttrs" => [], "partial" => false, ], [ "type" => "includes", "extAttrs" => [], "target" => "Iroha", "includes" => "Color", ], ]
有关更多详细信息,请参阅 webidl2
文档或 tests/syntax/
中的文件。
测试
在 tests/invalid
和 tests/syntax
中的测试案例来自 webidl2.js
。如果您从上游更新它们,请同时更新 tests/WebIDLTest.php
中的提交哈希。
$ composer test
黑客攻击
语法是用 wikipeg 编写的,这是一个可以输出 JS 或 PHP 代码的 PEG 解析器生成器。要在更改 Grammar.php
后重新生成解析器,请运行
$ npm install # once, to install the JS version of wikipeg
$ composer wikipeg
许可和致谢
此代码的初始版本由 C. Scott Ananian 编写,版权所有 (c) 2021 Wikimedia Foundation。
此代码根据 MIT 许可证分发;有关更多信息,请参阅 LICENSE。
此代码使用的测试案例是 webidl2.js 包的一部分,该包的版权所有者是 Robin Berjon,也根据 MIT 许可证分发。