wikimedia/webidl

PHP 的 WebIDL 解析器

v1.1.0 2023-02-24 20:42 UTC

This package is auto-updated.

Last update: 2024-09-12 06:11:13 UTC


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