【问题标题】:Language parser library written in PHP用 PHP 编写的语言解析器库
【发布时间】:2013-05-05 17:45:09
【问题描述】:

我正在寻找一种语言解析器用 PHP 编写

目标是阅读自定义语言,而不是阅读 PHP 代码。

基本上,我想指定一种语言语法,给出一个代码 sn-p 并返回一个表示它的结构。然后我可以遍历那个结构来执行代码sn-p。我相信结构将是一个AST,但我不知道这是否是唯一的选择(我对解析器及其词汇并不熟悉)。

我查看了Doctrine DQL parser,但它看起来不像是通用语言解析器。

【问题讨论】:

  • wezfurlong.org/blog/2006/nov/… - sourceforge 上也有一个,但懒得为您搜索链接。你可以从柠檬开始,它通常很容易上手,但当你看到生成的 PHP 类的文件大小时不要死。
  • 想要结束这个问题的人,请解释一下
  • @hakre 有意思,所以 Lemon 生成了一个用 PHP 编写的解析器?我会调查的。不过,我宁愿有一个通用的解析 PHP 库(如果语言发展,它会避免与 Lemon 来回切换)。
  • 如果我没记错的话,是的。这里是 sourceforge 链接:sourceforge.net/projects/lime-php - 如果你正在寻找一些 PHP 的东西,有一个 PHP 词法分析器的 Phlexy 它是由 NikiC 在PHP-Parser 中使用它。
  • 我真的搜索过了,真的什么也没找到。我发现的唯一东西(在 PHP 中)是 Doctrine 的解析器(太具体)和 NikiC 的 PHP 解析器(但我没有费心去读它,因为我认为它像真正的 PHP 解析器一样实现,即没有 AST :|) ...我意识到我应该有:)

标签: php parsing parser-generator abstract-syntax-tree


【解决方案1】:

这不是一个完整的列表,如果您正在寻找 PHP 运行时词法分析器/解析器,一个特殊的项目是 NikiC 的 Phlexy

您可以在PHP-Parser 中找到他编写的用例。这是一个用于 PHP 语言的解析器,具有抽象语法树 (AST),部分由语法文件生成。

我还没有做到这一点,根据我自己多年来的研究,PHP 用户空间中这样的项目并不多,而 NikiC 的这两个库确实是一个很好的例子。

如果您正在寻找一个遵循更多 flex 规则的词法分析器,我在XDOM 中编写了一个词法分析 CSS 选择器语法的词法分析器,它也带有解析器,但解析器不是基于语法文件,即使它存在于 CSS 规范中。词法分析器基于 .lex 文件。

【讨论】:

  • 2019 年更新:答案中有 3 个工具,顺序不相关。如今,php-parser 是最好的工具和标准,被 PHP 社区广泛采用,并在其肩上构建了许多工具。
  • OP 不想解析 PHP 代码;他想解析一种自定义语言。显然 PHP-Parser 使用了a forked version of kmyacc,它以某种方式通过模板以 PHP 为目标。
【解决方案2】:

据说 php 有一个库来做一个词法分析器/解析器: http://php.net/manual/en/parle.examples.php 对于 Windows,看起来您可以获取预编译的二进制文件。 http://php.net/manual/en/parle.installation.php 说这里有可用的版本:http://windows.php.net/downloads/pecl/releases/parle/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 2011-06-24
    • 2011-02-03
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多