满足这些要求的 Java Parser-Generator

标签 java parser-generator

我一直致力于开发一种脚本语言,该语言将 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 世界中的 ANTLR 和 JavaCC 有着相当长的成功记录。

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

关于满足这些要求的 Java Parser-Generator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17408189/

相关文章:

java - 如何在浮点二进制中查看数字表示

java - hadoop上的矩阵乘法

java - 未插入新行

php - 在 PHP 中创建脚本解析器

java - ANTLR 树解析器语法重写规则 *

java.lang.NoSuchMethodError : javax. persistence.JoinColumn.foreignKey

java - 使用用户输入更新另一个数据库表中的库存量

python - 用python处理重复结构化的文本文件

shell - 解析表达式语法是否适合解析 shell 命令语言?

haskell - 转移/减少 Happy 语法中的冲突