【问题标题】:What is a good parser generator for php?什么是好的 php 解析器生成器?
【发布时间】:2011-04-12 19:57:34
【问题描述】:

我需要解析一种用户可以在我的网站上键入的小型“迷你语言”。我想知道 lex 和 jacc 或 antlr 在 php 世界中的对应物是什么。

【问题讨论】:

    标签: php parsing generator dsl


    【解决方案1】:

    几年前我用过LIME Parser generator for PHP,它已经成熟稳定了。

    解析器生成器本身是用 PHP 编写的,这在任何技术意义上都无关紧要 - 因为我们只要求生成的解析器使用 PHP - 但我还是喜欢这个细节。这让我对用 PHP 编写软件感到不那么抱歉 ;-)

    编辑:

    我应该补充:

    1. 在我写“使用”的地方,说我“玩过”会更准确。我还没有使用石灰编写任何生产代码。但我认为没有理由不这样做。

    2. lime 提供的“计算器示例”使用 tokenize() 方法,该方法远不能真正替代 lex 的强大功能。但是如果你需要一个真正的分词器,应该可以在“前端”使用 lex 将令牌提供给“后端”的石灰。

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 我看到了这台发电机,但它已经 4 岁了。我在想可能会有更新的东西
      • 下次让我们看看一些内容,而不是一堆链接。
      • @ts。我想你现在知道了,但这完全是你的责任,而且是你一个人的责任,作为一个帖子作者:)
      【解决方案3】:

      我已经将 Jison(一个 javascript 中的 Bison 克隆)移植到了 php。结果是一个杀手级解析器,能够处理非常简单和非常复杂的词法分析/解析。它现在是 Jison 的一部分,但我的 fork 中有一些更新 - https://github.com/robertleeplummerjr/jison。文件在这里 - https://github.com/robertleeplummerjr/jison/tree/master/ports/php

      请参阅该页面中的自述文件,您可以同时创建一个能够执行相同或不同操作的 javascript 和 php 解析器。酷!

      【讨论】:

        【解决方案4】:

        我建议你编写自己的解析器,因为它现在很容易。

        在我看来,最简单的方法是为每种可能的语法类型(表达式、测试、循环等)创建一个类。

        然后在每个类中,编写以下方法:

        • 一种根据字符串确定字符串是否属于给定类型的方法(a+b 属于“表达式”类型,if(b) 不是)
        • 一种“运行”这种类型的方法(a+b 将返回 a->run() + b->run()a->run() 将返回一个值)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-22
          • 2010-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多