此翻译可能已过时。

查看 AST

mago ast 打印一个 PHP 文件的抽象语法树或 token 流。适合用来调试棘手的解析、了解 Mago 如何看待某段语法,或者把输出喂给其他需要 Mago 解析器的工具。它并不属于格式化器 / linter / 分析器 / guard 的常规流程;请把它当作调试命令,和 list-files 之类的命令一起对待。

树状视图

给定 example.php:

<?php

echo 'Hello, World!';
mago ast example.php
Program
├── Statement
│ └── OpeningTag
│ └── FullOpeningTag
└── Statement
 └── Echo
 ├── Keyword
 ├── Expression
 │ └── Literal
 │ └── LiteralString "Hello, World!"
 └── Terminator ;

Token 视图

--tokens 改为打印词法分析器的 token 流。可用于排查低层语法问题。

mago ast example.php --tokens
 Kind                      Value                                              Span
 ─────────────────────────────────────────────────────────────────────────────────────────────
 OpenTag                   "<?php"                                            [0..5]
 Whitespace                "\n\n"                                             [7..7]
 Echo                      "echo"                                             [7..11]
 Whitespace                " "                                                [12..12]
 LiteralString             "'Hello, World!'"                                  [12..27]
 Semicolon                 ";"                                                [27..28]
 Whitespace                "\n"                                               [29..29]

JSON 输出

--json 把上述任一视图切换为美化后的 JSON。可与 --tokens 组合得到 token 流 JSON,或单独使用得到完整 AST。

mago ast example.php --json
{
    "error": null,
    "program": {
        "file_id": 9370985751100973094,
        "source_text": "<?php\n\necho 'Hello, World!';\n",
        "statements": { "nodes": [] },
        "trivia": { "nodes": [] }
    }
}

参考

Usage: mago ast [OPTIONS] <FILE>
参数说明
<FILE>要检查的 PHP 文件。必填。
选项说明
--tokens打印词法分析器的 token 流而非解析后的 AST。
--json以美化后的 JSON 输出(AST 或 token 流)。
--names在解析后的 AST 上运行名称解析器,打印每个符号的完全限定名。不能与 --tokens 同时使用。
-h, --help打印帮助并退出。

全局选项必须出现在 ast 之前。完整列表见 CLI 概览

在 Rust 中直接驱动解析器

如果你正用 Rust 构建工具并需要一个快速的 PHP 解析器,可以直接使用 Mago 的 crate:

  • mago-syntax:词法分析器、语法分析器、AST 节点定义,以及遍历 AST 的辅助工具。
  • mago-names:名称解析,将本地类名转换为其完全限定形式。

↳ 编辑此页 →