这些需求的Java解析器生成器

这些需求的Java解析器生成器,java,parser-generator,Java,Parser Generator,我一直在致力于开发一种脚本语言,该语言将java.awt.Graphics类中的方法移植到 setcolor_0,127,214,255 //R,G,B,Alpha setcolor_0127214255//R,G,B,Alpha 或 fillrect_50,25100,75//x,y,w,h 这样我就可以避免每次创建某个图像时都需要编写整个程序。该语言本身目前仅限于伪函数和命令(直接映射到图形方法调用),加上一些输出说明符作为每个脚本的头,但我想添加更多。脚本在一个程序中处理,该程序同时充当解

我一直在致力于开发一种脚本语言,该语言将
java.awt.Graphics
类中的方法移植到
setcolor_0,127,214,255 //R,G,B,Alpha setcolor_0127214255//R,G,B,Alpha 或
fillrect_50,25100,75//x,y,w,h 这样我就可以避免每次创建某个图像时都需要编写整个程序。该语言本身目前仅限于伪函数和命令(直接映射到图形方法调用),加上一些输出说明符作为每个脚本的头,但我想添加更多。脚本在一个程序中处理,该程序同时充当解析器和解释器,但我直接处理输入字符串的方法不足以满足我的要求

虽然我已经搜索并找到了大量的解析器和词法生成器,但我一直遇到与解析器生成器相同的两个问题,即

  • 生成的解析器将需要某种形式的运行时依赖关系(/-ies),只有生成器才能提供这种依赖关系(例如:需要自己的运行时文件的产品),或者
  • 发电机似乎尚未完全开发,或者如果情况并非如此,则发电机仍至少做出了一个令人不快的假设。(例如:在不包含类标记的情况下生成源代码的方法,并假设所有类都在同一个文件中。)
  • 因此,除了避免这些事情,我正在寻找一个解析器生成器,它也有大量的开放文档(这就是为什么我想避开ANTLR),并输出Java源代码(我希望输出的是尽可能最新的Java版本,但这对我来说不是很重要)

    tl;dr:我需要一个解析器生成器,它:
  • 随大量文档(外部或其他)一起提供,我自己不承担任何费用
  • 生成不需要外部依赖项才能运行的解析器
  • 输出Java源代码(它是最新的(也许我可以称它为1.5或更高版本?)并且易于阅读),并且
  • 生成一个正确封装的类

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

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

    如果您希望解析器生成器不是不完整的,我建议您使用成熟的解析器生成器。Java世界中的ANTLR和JavaCC有着相当长的成功记录


    如果你坚持你仍然不想要这样的东西,你总是可以的。这对于“简单”语言尤其有效,比如您的语言。[您将发现,您最终编写了自己的支持库,尽管它不一定很大。]

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

    也就是说,我认为JavaCC具有最少的运行时需求:可以从其库中复制的CharStream类

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


    考虑到您所需的Java解析范围有限,您可能需要分析您所需的内容是否只需一个regexp库即可实现。

    谢谢。您提醒过我,有时候,最好的解决方案是“处理它”。我将从提供的库中查看我需要的东西,看看我是否不能只复制部分代码。我还将更认真地研究JavaCC。 fillrect_50,25,100,75 //x,y,w,h