antlr / antlr4-php-runtime
ANTLR 4 的 PHP 8.0+ 运行时
Requires
- php: ^8.0
- ext-mbstring: ^8.0
- psr/log: ^2.0 || ^3.0
Requires (Dev)
README
第一步
1. 安装 ANTLR4
入门指南 应该能帮助你开始。
2. 安装 PHP ANTLR 运行时
ANTLR 的每个目标语言都有一个运行时包,用于运行 ANTLR4 生成的解析器。运行时提供了一套通用的工具来使用您的解析器。
使用 Composer 安装运行时
composer require antlr/antlr4-php-runtime
3. 生成您的解析器
您使用 ANTLR4 的 "工具" 生成解析器。这些将引用上面安装的 ANTLR 运行时。
假设您正在使用 UNIX 系统,并已如 入门指南 中所述设置 ANTLR4 工具别名。要生成您的 PHP 解析器,请运行以下命令
antlr4 -Dlanguage=PHP MyGrammar.g4
有关 antlr4 工具的完整选项列表,请访问 工具文档页面。
完整示例
假设您正在使用来自 https://github.com/antlr/grammars-v4/tree/master/json 的 JSON 语法。
然后,运行 antlr4 -Dlanguage=PHP JSON.g4
。这将生成一个包含 .php
文件的集合,位于 parser
目录中,包括
JsonParser.php
JsonBaseListener.php
JsonLexer.php
JsonListener.php
ANTLR 工具的另一个常见选项是 -visitor
,它将生成一个解析树访问者,但在这里我们将不这样做。有关 antlr4 工具的完整选项列表,请访问 工具文档页面。
我们将编写一个小型主函数来调用生成的解析器和词法分析器(假设它们是分开的)。这个函数将输出遇到的 ParseTreeContext
。
<?php namespace JsonParser; use Antlr\Antlr4\Runtime\CommonTokenStream; use Antlr\Antlr4\Runtime\Error\Listeners\DiagnosticErrorListener; use Antlr\Antlr4\Runtime\InputStream; use Antlr\Antlr4\Runtime\ParserRuleContext; use Antlr\Antlr4\Runtime\Tree\ErrorNode; use Antlr\Antlr4\Runtime\Tree\ParseTreeListener; use Antlr\Antlr4\Runtime\Tree\ParseTreeWalker; use Antlr\Antlr4\Runtime\Tree\TerminalNode; final class TreeShapeListener implements ParseTreeListener { public function visitTerminal(TerminalNode $node) : void {} public function visitErrorNode(ErrorNode $node) : void {} public function exitEveryRule(ParserRuleContext $ctx) : void {} public function enterEveryRule(ParserRuleContext $ctx) : void { echo $ctx->getText(); } } $input = InputStream::fromPath($argv[1]); $lexer = new JSONLexer($input); $tokens = new CommonTokenStream($lexer); $parser = new JSONParser($tokens); $parser->addErrorListener(new DiagnosticErrorListener()); $parser->setBuildParseTree(true); $tree = $parser->json(); ParseTreeWalker::default()->walk(new TreeShapeListener(), $tree);
创建一个 example.json
文件
{"a":1}
解析输入文件
php json.php example.json
预期的输出是
{"a":1}
{"a":1}
"a":1
1
有用信息
《ANTLR 4 完全参考》
程序员经常遇到解析问题。无论是 JSON 这样的数据格式、SMTP 这样的网络协议、Apache 的服务器配置文件、PostScript/PDF 文件,还是简单的电子表格宏语言——ANTLR v4 和这本书将使解析过程变得不再神秘。ANTLR v4 已经从头开始重写,使其构建解析器和构建在解析器之上的语言应用变得更加容易。畅销书《ANTLR 完全参考》的新版完全重写,展示了如何利用这些新功能。
您可以在亚马逊购买这本书 《ANTLR 4 完全参考》,或在出版社网站上获取 电子版。
您会发现这本书的 源代码 很有用。
附加语法
此存储库 是一个语法集合,其中没有动作,根目录的名称是语法解析的语言的全小写名称。