【问题标题】:Java Parser-Generator for these requirementsJava Parser-Generator 满足这些要求
【发布时间】:2013-07-01 15:28:36
【问题描述】:

我一直致力于开发一种脚本语言,它将java.awt.Graphics 类中的方法移植到类似

的命令中
setcolor_0,127,214,255 //R,G,B,Alpha

fillrect_50,25,100,75 //x,y,w,h
成一张图片,这样我就可以避免每次想要创建某个图像时都必须编写整个程序。语言本身目前仅限于伪函数和命令(直接映射到 Graphics 方法调用),加上一些输出说明符作为每个脚本的标题,但我想添加更多。该脚本在一个同时用作解析器和解释器的程序中进行处理,但是我直接处理输入字符串的方法不足以满足我的要求。

虽然我已经搜索并发现了大量的解析器和词法分析器生成器,但我仍然遇到与解析器生成器相同的两个问题,那就是

  1. 生成的解析器需要某种形式的运行时依赖(/-ies),只有生成器才能提供(例如:Beaver 的产品需要自己的运行时文件),或者
  2. 生成器似乎尚未完全开发,或者如果不是这种情况,那么生成器仍会做出至少一个令人不快的假设。 (例如:Jay 生成源代码的方法不包含类标记并假设所有类都在同一个文件中。)

所以除了避免这些事情之外,我还在寻找一个解析器生成器,它也有大量的开放文档(这就是我想避开 ANTLR 的原因),它输出 Java 源代码(我更喜欢输出尽可能为最新的 Java 版本,但这对我来说不是很重要)。

tl;dr:我需要一个解析器生成器:

  1. 我可以免费获得大量文档(外部或其他)。
  2. 构建解析器
    1. 不需要外部依赖即可运行,
    2. 输出 Java 源代码(它既是最新的(也许我可能会在 1.5 或更高版本中调用它?)并且易于阅读),并且
    3. 生成正确封装的类。

【问题讨论】:

    标签: java parser-generator


    【解决方案1】:

    欢迎来到广阔的软件重用世界,在这里您可以从大量组件中进行选择,但所有组件都不能完全满足您的需求。

    获得一个没有“外部依赖”的解析器生成器包可能是不现实的。几乎任何复杂的软件都使用特殊函数库来支持其用途,解析器生成器并没有真正的不同。你所做的区分似乎也相当人为。想象一下,解析器生成器只是为外部库发出代码,而不是简单地引用它。您获得的代码量以及它的组织方式不会有所不同。那你为什么要反对库版本呢?

    如果你想要不完整的解析器生成器,我建议你坚持使用成熟的。 ANTLR 和 JavaCC 在 Java 世界中有着相当长的成功记录。

    如果你坚持你仍然不想要这些东西,你可以随时hand-code a recursive descent parser。这对于“简单”语言尤其有效,例如您的语言。 [您会发现,您最终会编写自己的支持库,尽管它不必很大。]

    【讨论】:

    • 谢谢。您提醒我,有时,最好的解决方案是“处理它”。我将从提供的库中查看我需要的东西,看看我是否不能只复制部分代码。我还将更认真地研究 JavaCC。
    【解决方案2】:

    正如@Ira 所说,生成的解析器至少将依赖于使通用解析选项易于调用的运行时。另一种方法是将完全相同的运行时代码复制到每个生成的解析器中。

    也就是说,我认为 JavaCC 的运行时要求最少:您可以从它的库中复制一个 CharStream 类。

    不幸的是,生成的解析器的可读性与运行时的特性成反比。运行时间越少,级别越低,可读性越差。

    鉴于您需要的 Java 解析范围有限,您可能需要分析是否仅使用 regexp 库即可实现所需的内容。

    【讨论】:

      猜你喜欢
      • 2019-09-15
      • 1970-01-01
      • 2011-03-21
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      相关资源
      最近更新 更多