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 许可证分发。