用PHP编写的语言解析库

10

我正在寻找一款用PHP编写的语言解析器。

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

基本上,我的想法是指定语言语法,给出代码片段,然后获得代表它的结构。接着我可以遍历该结构以执行代码片段。我相信这个结构将是AST(抽象语法树),但我不知道这是否是唯一的选项(我对解析器及其术语不太熟悉)。

我查看了Doctrine DQL解析器,但它似乎不是一款通用的语言解析器。


这篇关于 PHP 的解析器和词法分析器生成器的博客文章很有用。在 SourceForge 上也有一个类似的工具,但我懒得为你找链接了。你可以从 Lemon 开始,它通常是一个简单易用的起点,但当你看到生成的 PHP 类文件大小时不要惊讶。 - hakre
2
如果我没记错的话,是的。这里是SourceForge链接:http://sourceforge.net/projects/lime-php/ - 如果你正在寻找一些PHP即时处理的东西,那么可以使用Phlexy,它是由NikiC开发的PHP词法分析器,也被用于PHP-Parser中。 - hakre
@hakre 太棒了!Phlexy正是我在寻找的东西!请将其发布为答案,以便在问题关闭之前我可以接受它(出于神秘原因,但人们似乎喜欢这个想法)。 - Matthieu Napoli
1
我真的搜索了,但真的什么都没找到。唯一找到的(用PHP)是Doctrine的解析器(太具体了),还有NikiC的PHP解析器(但我没有深入研究,因为我以为它是像真正的PHP解析器那样实现的,即没有AST :|)...我意识到我应该这样做 :) - Matthieu Napoli
1
我也有同样的需求 :) 在不同编程语言之间来回迁移。你能分享一下你的探索结果吗? - Tomas Votruba
显示剩余6条评论
2个回答

5
这不是一个完整的列表,如果您正在寻找与PHP运行时词法分析器/解析器相关的内容,其中一个杰出的项目是NikiC的Phlexy
您也可以在由他编写的PHP-Parser中找到用例。这是一个带有抽象语法树(AST)的PHP语言解析器,部分生成自语法文件。
我多年来一直在研究,但是从我的研究中得知,PHP用户空间中没有太多这样的项目,而NikiC的这两个库确实是非常好的例子。
如果您正在寻找更符合flex规则的词法分析器,我在XDOM中编写了一个用于分析CSS选择器语法的分析器,它也具有解析器,但是该解析器并非基于语法文件,尽管在CSS规范中存在。词法分析器基于.lex文件。

2019年更新:答案中有3个工具,顺序不相关。现在,php-parser是最好的工具和标准,被PHP社区广泛采用,在其基础上构建了许多工具。 - Tomas Votruba
2
OP 不想解析 PHP 代码,他想解析一种自定义语言。显然 PHP-Parser 使用一个 forked 版本的 kmyacc,通过模板以某种方式针对 PHP 进行解析。 - jchook

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接